JSで優れたbase64エンコーディングの実装に遭遇しました。その典型的な仕事は、utf8でエンコードされたテキスト入力を受け取り、base64出力を提供することです(その逆も同様です)。しかし、base32に適したソリューションを見たことがないことに驚いています。さて、私が見つけたのはそれだけです:
1. agnoster/base32-js。これはnodejs用であり、そのメインのbase32.encode関数は入力を文字列として受け取ります。
2.base32 -encoding-in-javascript。これも文字列として入力を受け取ります。さらに、これにはデコーダーがありません。
しかし、入力をHEX(またはbase64)として受け取るためのスクリプトが必要です!!! 入力が16進数の場合、出力は短くなります。私の入力がbase64の場合、ウィキペディアによると、出力は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がCKVTIEVLGQJKWNASVM2A====をhextobase32("12AB3412AB3412AB3412AB34")
生成し、12AB3412AB3412AB3412AB34を返すことを確認したいと思います。 base32tohex("CKVTIEVLGQJKWNASVM2A====")
更新パディングの問題を処理していないように見えるagnoster/base32-jsに加えて、次のライブラリに遭遇しまし
た
。1.Nibbler 。ウィキペディアによると、エンコードには8ビットと7ビットの2つの方法があります。このlibには、8ビットまたは7ビットの方法を選択するオプションもあります(おそらく、base32ではなくbase64のみを対象としています)。しかし、このプロジェクトはまったく進化していません。そしてもう1つ、コメントを読むと、このlibにもパディングの問題があることがわかります。
2. ChrisUmbel32.js。このlibは、デコードのためにバイトテーブル全体を運ぶことにしました。そして、あなたはこの興味深いコメントをソースコードで見ることができます:dataBits
/ *バイトごとは、クインテットごとのクインテットほどきれいではありませんが、テストは少し速くなります。再訪する必要があります。*/
しかし進化していません。
3.jsliquid.Data 。_ いわゆるバイナリラージオブジェクトを操作します。仕事を成し遂げたようですが、そのコードは非常に難読化されているため、カスタムアルファベットを定義する方法すらわかりません。
そして今、信頼できる品質の完全に機能するJavascript UTF8 / hex / base32 / base64ライブラリは素晴らしいと思いますが、現在のところ状況は疑わしいです。