开发 助记词转换为 Entropy

ada · 发布于 2018年07月16日 · 最后由 ada 回复于 2018年07月16日 · 536 次阅读
本帖已被设为精华帖!

助记词转换为Entropy是在 bip39 中规定的。

函数原型:

function mnemonicToEntropy (mnemonic)

算法流程如下:

  1. 将参数mnemonic根据切换空格切分成word list 数组;
  2. word list数组元素必须为3的整数倍,否则报错退出;
  3. 在字典中,依次找到每个word在字典中的索引,并把这些索引转换为2进制(11位,不足补0),从前到后组合在一起,生成一个 big int 或者 bits string 例如,假设word list的索引依次为:

1 2 3 4 5

分别转换为二进制为:

00000000001 00000000010 00000000011 00000000100 00000000101

将二进制合在一起: 0000000000100000000010000000000110000000010000000000101

如果用数学公式表达的话,如果依次有n1, n2, n3, n4, n5, n6,那么组成的大数为:

((((((n1 << 11) + n2) << 11 + n3) << 11 + n4) << 11) + n5) << 11 + n6

  1. 步骤3得到的大数(或者bits string)中,前面N位时原始entropy,后面是checksum N = Math.floor(bits string length / 33) * 32

N应该大于16,小于32,且能够被4整除

  1. 计算前N位的checksum,与后面的checksum对比,是否一致,如果不一致,报错
  2. 返回前N位的raw entropy
共收到 1 条回复

golang的bip39的库 的函数 MnemonicToByteArray 默认返回的是 带checksum的entropy

js的bip39库 的函数 mnemonicToEntropy 返回的是不带checksum的entropy

admin 将本帖设为了精华贴 07月16日 14:10
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册