项目作者: cryptocoinjs

项目描述 :
Encode/decode any base
高级语言: JavaScript
项目地址: git://github.com/cryptocoinjs/base-x.git
创建时间: 2015-05-19T04:25:00Z
项目社区:https://github.com/cryptocoinjs/base-x

开源协议:MIT License

下载


base-x

NPM Package
Build Status

js-standard-style

Fast base encoding / decoding of any given alphabet using bitcoin style leading
zero compression.

WARNING: This module is NOT RFC3548 compliant, it cannot be used for base16 (hex), base32, or base64 encoding in a standards compliant manner.

Example

Base58

  1. var BASE58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
  2. import basex from 'base-x'
  3. var bs58 = basex(BASE58)
  4. var decoded = bs58.decode('5Kd3NBUAdUnhyzenEwVLy9pBKxSwXvE9FMPyR4UKZvpe6E3AgLr')
  5. console.log(decoded)
  6. // => Uint8Array(33) [
  7. // 128, 237, 219, 220, 17, 104, 241, 218,
  8. // 234, 219, 211, 228, 76, 30, 63, 143,
  9. // 90, 40, 76, 32, 41, 247, 138, 210,
  10. // 106, 249, 133, 131, 164, 153, 222, 91,
  11. // 25
  12. // ]
  13. console.log(bs58.encode(decoded))
  14. // => 5Kd3NBUAdUnhyzenEwVLy9pBKxSwXvE9FMPyR4UKZvpe6E3AgLr

Alphabets

See below for a list of commonly recognized alphabets, and their respective base.

Base Alphabet
2 01
8 01234567
11 0123456789a
16 0123456789abcdef
32 0123456789ABCDEFGHJKMNPQRSTVWXYZ
32 ybndrfg8ejkmcpqxot1uwisza345h769 (z-base-32)
36 0123456789abcdefghijklmnopqrstuvwxyz
58 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
62 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
64 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
67 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~

How it works

It encodes octet arrays by doing long divisions on all significant digits in the
array, creating a representation of that number in the new base. Then for every
leading zero in the input (not significant as a number) it will encode as a
single leader character. This is the first in the alphabet and will decode as 8
bits. The other characters depend upon the base. For example, a base58 alphabet
packs roughly 5.858 bits per character.

This means the encoded string 000f (using a base16, 0-f alphabet) will actually decode
to 4 bytes unlike a canonical hex encoding which uniformly packs 4 bits into each
character.

While unusual, this does mean that no padding is required and it works for bases
like 43.

LICENSE MIT

A direct derivation of the base58 implementation from bitcoin/bitcoin, generalized for variable length alphabets.