Encode HEXADECIMAL (or base64) input to base32 output, decode base32 input to hex/base64 - looking for Javascript solution
我在JS中遇到了一个不错的base64编码实现,它的典型工作是接受一个utf8编码的文本输入并给出base64输出(反之亦然)。但是我很惊讶我从来没有看到一个适合base32的解决方案!好吧,这就是我所发现的:1。Agnoster/Base32 JS.这是用于nodejs的,它的主base32.encode函数将输入作为字符串。2。使用javascript进行base32编码。这也将输入作为一个字符串。而且,这对于解码器来说是缺乏的。但我需要脚本将输入作为十六进制(甚至base64)!!!!如果我的输入是十六进制,那么输出将被缩短;如果我的输入是base64,那么根据维基百科,输出将是20%的超大——这就是我所期望的。给出字母"abcdefghijklmnopqrstuvwxyz234567":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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
更新除了Agnoster/Base32 JS,它似乎不处理填充问题,我还遇到了以下libs:1。Nibbler。根据维基百科,有两种编码方式:8位和7位。这个lib甚至有一个选项
第一个node.js接受二进制字符串的输入,您需要的是它接受base-16或base-64的输入。既然你已经有漂亮的base 64实现,base16解码器非常简单,我想你已经设置好了。
https://github.com/agnoster/base32-js/blob/master/lib/base32.js也适用于开箱即用的浏览器。
所以你可以在浏览器中这样使用它:
1 2 3 | var result = base32.encode(base64decode(base64input)); var result2 = base32.encode(base16decode(base16input)); var result3 = base32.encode(binaryInput); |
其中,
1 2 3 4 5 | 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/