NodeJs Buffer.toString() 在 7.x 和 8.x 版本(模块加密)中得到不同的结果
NodeJs Buffer.toString() get different result in 7.x and 8.x version (module crypto)
我在使用 NodeJs 的模块 crypto 时有一个奇怪的行为。
我在 windows 10,使用 nvm 来管理不同的节点版本。
这里是获取行为的示例:
let crypto = require('crypto');
let t1 = crypto.createHash('sha256').update('abcdefghijklmnopqrs1@0', 'utf8').digest();
console.log(t1);
console.log(t1.toString('utf-8'));
当使用节点 v7.7.3 时,我得到以下输出:
<Buffer ab 7e fe cb 51 e4 3b 3e 2c 53 94 86 bd 64 f0 4d e3 99 7c ff 98 d7 9a 38 8f ac 97 e2 c1 f0 94 0a>
�~��Q�;>,S���d�M��|��ך8�������
当使用节点 v8.9.4 时,我得到:
<Buffer ab 7e fe cb 51 e4 3b 3e 2c 53 94 86 bd 64 f0 4d e3 99 7c ff 98 d7 9a 38 8f ac 97 e2 c1 f0 94 0a>
�~��Q�;>,S���d�M�|��ך8������
可以看到字符串不同但是缓冲区是一样的
我的用例是我尝试将 7.7.3 中生成的保存字符串与 8.9.4 中生成的新字符串进行比较,它不相等但应该相等!
谁能给我解释一下,或者提供解决方法?
谢谢,
泰奥
由于较新的版本在转换为 utf8 字符串时有所不同,您可以使用自定义函数从 feross/buffer
库进行转换:
// Copy from feross/buffer
function utf8Slice (buf, start, end) {
...
}
let crypto = require('crypto');
let t1 = crypto.createHash('sha256').update('abcdefghijklmnopqrs1@0', 'utf8').digest();
console.log(t1);
console.log(utf8Slice(t1, 0, t1.length))
我在使用 NodeJs 的模块 crypto 时有一个奇怪的行为。 我在 windows 10,使用 nvm 来管理不同的节点版本。
这里是获取行为的示例:
let crypto = require('crypto');
let t1 = crypto.createHash('sha256').update('abcdefghijklmnopqrs1@0', 'utf8').digest();
console.log(t1);
console.log(t1.toString('utf-8'));
当使用节点 v7.7.3 时,我得到以下输出:
<Buffer ab 7e fe cb 51 e4 3b 3e 2c 53 94 86 bd 64 f0 4d e3 99 7c ff 98 d7 9a 38 8f ac 97 e2 c1 f0 94 0a>
�~��Q�;>,S���d�M��|��ך8�������
当使用节点 v8.9.4 时,我得到:
<Buffer ab 7e fe cb 51 e4 3b 3e 2c 53 94 86 bd 64 f0 4d e3 99 7c ff 98 d7 9a 38 8f ac 97 e2 c1 f0 94 0a>
�~��Q�;>,S���d�M�|��ך8������
可以看到字符串不同但是缓冲区是一样的
我的用例是我尝试将 7.7.3 中生成的保存字符串与 8.9.4 中生成的新字符串进行比较,它不相等但应该相等! 谁能给我解释一下,或者提供解决方法?
谢谢,
泰奥
由于较新的版本在转换为 utf8 字符串时有所不同,您可以使用自定义函数从 feross/buffer
库进行转换:
// Copy from feross/buffer
function utf8Slice (buf, start, end) {
...
}
let crypto = require('crypto');
let t1 = crypto.createHash('sha256').update('abcdefghijklmnopqrs1@0', 'utf8').digest();
console.log(t1);
console.log(utf8Slice(t1, 0, t1.length))