Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将十六进制(或base64)输入编码为base32输出,将base32输入解码为hex/base64-寻找Javascript解决方案_Javascript_Encoding_Base64_Base32 - Fatal编程技术网

将十六进制(或base64)输入编码为base32输出,将base32输入解码为hex/base64-寻找Javascript解决方案

将十六进制(或base64)输入编码为base32输出,将base32输入解码为hex/base64-寻找Javascript解决方案,javascript,encoding,base64,base32,Javascript,Encoding,Base64,Base32,我在JS中遇到了一个不错的base64编码实现,它的典型工作是接受utf8编码的文本输入并给出base64输出(反之亦然)。但我很惊讶,我从来没有看到一个适合base32的解决方案!好吧,这就是我所发现的: 1.这是针对NodeJ的,其主base32.encode函数将输入作为字符串。 2.这也将输入作为字符串。此外,这还缺少解码器。 但是我需要脚本将输入作为十六进制(甚至是base64)!!!如果我的输入是十六进制,那么输出将被缩短;如果我的输入是base64,那么根据,输出将是20%的超大尺

我在JS中遇到了一个不错的base64编码实现,它的典型工作是接受utf8编码的文本输入并给出base64输出(反之亦然)。但我很惊讶,我从来没有看到一个适合base32的解决方案!好吧,这就是我所发现的:
1.这是针对NodeJ的,其主base32.encode函数将输入作为字符串。
2.这也将输入作为字符串。此外,这还缺少解码器。
但是我需要脚本将输入作为十六进制(甚至是base64)!!!如果我的输入是十六进制,那么输出将被缩短;如果我的输入是base64,那么根据,输出将是20%的超大尺寸-这就是我所期望的。
给出字母“abcdefghijklmnopqrstuvxyz234567”:

我希望看到javascript
hextobase32(“12AB3412AB3412AB3412AB34”)
yieldingCKVTIEVLGQJKWNASVM2A===
base32tohex(“CKVTIEVLGQJKWNASVM2A===”
返回12AB3412AB3412AB3412AB34

更新
除此之外,它似乎无法处理填充问题,我还遇到了以下libs:
1.根据,有两种编码方式:8位和7位。这个库甚至有一个选项
dataBits
(可能它只针对base64,不针对base32,我不知道)来选择8位或7位方式!但这个项目根本没有进展。还有一件事:阅读评论,我发现这个库也有填充问题
2.这个库决定携带整个字节表进行解码。您可以在源代码中看到这个有趣的注释:
/*一个字节一个字节不如五个字节一个五个字节漂亮,但是测试了一点 更快。将不得不重新访问*/
但不是进化。
3.以所谓的方式运作。似乎完成了这项工作,但由于其代码非常混乱,我甚至不知道如何定义自定义字母表。

现在,我认为一个功能全面、质量可靠的Javascript UTF8/hex/base32/base64库是很好的,但目前的情况是可疑的。

第一个node.js以二进制字符串形式输入,您需要的是以base-16或base-64形式输入。既然你已经 有很好的base-64实现,base16解码器非常简单,我想你已经准备好了

也适用于开箱即用的浏览器

所以您可以在浏览器中这样使用它:

var result = base32.encode(base64decode(base64input));
var result2 = base32.encode(base16decode(base16input));
var result3 = base32.encode(binaryInput);
其中
base16解码

function base16decode( str ) {
    return str.replace( /([A-fa-f0-9]{2})/g, function( m, g1 ) {
        return String.fromCharCode( parseInt( g1, 16 ));
    });
}

对不起,我不明白。Base32编码数据必须短于十六进制数据!但使用agnoster-base32测试此代码:
alert(base32.encode(“12AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB34”)
,看看“64t42ghk6grk4ga26cu32cj188tk8c9j85136d1h690m4ctm64t42ghk6grk4ga26cu32cj188tk8c9j85136d0”,它更大,因为编码函数没有以二进制数据的形式获取输入(参见agnoster-base32脚本源代码中的
this.readByte=function(byte){if(typeof byte=='string')byte=byte.charCodeAt(0)…}
part)@lyricallywicked请看……等等,这应该是一个十六进制字符串吗?我回答的全部要点是在传递base 16输入之前使用base 16解码……在本例中,
base32.encode(“12AB3412AB34”)
导致了
Base32:64t42ghk6grk4ga26cu0
。这意味着数据没有被当作二进制,但我希望输入是十六进制的!@lyricallywicked第三次,base16在传递到Base32编码之前对其进行解码。我稍后会深入研究,但我看到您使用
parseInt
。我不喜欢它。请告诉我,这段代码行吗使用任意大小的字符串,如下所示:
base32.encode(base16解码(“12AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB3412AB34”)
,结果会是什么样子?
function base16decode( str ) {
    return str.replace( /([A-fa-f0-9]{2})/g, function( m, g1 ) {
        return String.fromCharCode( parseInt( g1, 16 ));
    });
}