gpt4 book ai didi

javascript - 将 HEXADECIMAL(或 base64)输入编码为 base32 输出,将 base32 输入解码为 hex/base64 - 寻找 Javascript 解决方案

转载 作者:行者123 更新时间:2023-11-30 06:36:15 34 4
gpt4 key购买 nike

我在 JS 中遇到了一个很好的 base64 编码实现,它的典型工作是采用 utf8 编码的文本输入并给出 base64 输出(反之亦然)。但令我惊讶的是,我从未见过适合 base32 的解决方案!好吧,这就是我找到的所有内容:
1. agnoster/base32-js。这是针对 nodejs 的,它的主要 base32.encode 函数将输入作为字符串。
2. base32-encoding-in-javascript。这也将输入作为字符串。而且,这缺少解码器。
但我需要脚本将输入作为 HEX(甚至 base64)!!!如果我的输入是十六进制,那么输出将被缩短;如果我的输入是 base64,那么根据 wikipedia ,输出将超大 20%——这正是我所期望的。
给定字母“ABCDEFGHIJKLMNOPQRSTUVWXYZ234567”:

hexdata: 12AB3412AB3412AB3412AB34;

//RFC 3548 chapter 5: The encoding process represents 40-bit groups of input bits
//as output strings of 8 encoded characters.

bin b32
00010 --> C
01010 --> K
10101 --> V
10011 --> T
01000 --> I
00100 --> E
10101 --> V
01011 --> L
//+40 bits
00110 --> G
10000 --> Q
01001 --> J
01010 --> K
10110 --> W
01101 --> N
00000 --> A
10010 --> S
//+16 bits
10101 --> V //RFC 3548 chapter 5 case 3:
01100 --> M //the final quantum of encoding input is exactly 16 bits;
11010 --> 2 //here, the final unit of encoded output will be four characters
0 --> //followed by four "=" padding characters
//zero bits are added (on the right) to form an integral number of 5-bit groups
-->
00000 --> A
--> base32data: CKVTIEVLGQJKWNASVM2A====

我希望看到 javascript hextobase32("12AB3412AB3412AB3412AB34") 生成 CKVTIEVLGQJKWNASVM2A====base32tohex("CKVTIEVLGQJKWNASVM2A====") 返回 12AB3412AB3412AB3412AB34

更新
除了似乎无法处理填充问题的 agnoster/base32-js 之外,我还遇到了以下库:
1. Nibbler。根据 wikipedia ,有两种编码方式:8 位和 7 位。这个库甚至有一个选项 dataBits(也许它只适用于 base64,而不是 base32,我不知道)来选择 8 位或 7 位方式!但是这个项目根本没有发展。还有一件事:阅读评论,我看到这个库也有填充问题!
2. Chris Umbel thirty-two.js。该库决定携带整个字节表进行解码。你可以在源代码中看到这个有趣的注释:
/* byte by byte 不如 quintet by quintet 漂亮,但测试了一下 快点。将不得不重新访问。 */
但没有进化。
3. jsliquid.Data。在所谓的 binary large objects 上运行。似乎完成了工作,但由于其代码被严重混淆,我什至看不到如何定义我的自定义字母表。
现在,我认为质量可靠的全功能 Javascript UTF8/hex/base32/base64 库会很棒,但目前情况令人怀疑。

最佳答案

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

https://github.com/agnoster/base32-js/blob/master/lib/base32.js也适用于开箱即用的浏览器。

所以你会在浏览器中像这样使用它:

var result = base32.encode(base64decode(base64input));
var result2 = base32.encode(base16decode(base16input));
var result3 = base32.encode(binaryInput);

其中 base16decode:

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

http://jsfiddle.net/YPuF3/1/

关于javascript - 将 HEXADECIMAL(或 base64)输入编码为 base32 输出,将 base32 输入解码为 hex/base64 - 寻找 Javascript 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14270782/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com