JS 和 shell 之间的 MD5 哈希不同
MD5 hash differs between JS and shell
我正在尝试生成 base64 编码的 MD5 哈希。
在Javascript中,我有:
const crypto = require('crypto');
const utf8 = require('utf8');
const hash = crypto.createHash('md5');
const bodyData = JSON.stringify({ message: 'Hello world' });
hash.update(utf8.encode(bodyData)).digest('base64');
导致:
jANzQ+rgAHyf1MWQFSwvYw==
尝试在 shell 中做同样的事情,我有:
echo -n '{"message":"Hello world"}' \
| iconv -t utf-8 \
| md5sum \
| cut -d' ' -f1 \
| base64
导致:
OGMwMzczNDNlYWUwMDA3YzlmZDRjNTkwMTUyYzJmNjMK
我错过了什么?为什么我得到的结果与使用 Javascript 得到的结果不同?
NodeJS 代码 returns Base64 编码的 MD5 散列,而 md5sum
returns the hex encoded MD5 hash, which is then Base64 encoded because of the following base64
.
要获得 NodeJS 代码的结果,必须先对十六进制编码的哈希值进行十六进制解码,然后再进行 Base64 编码。
这可以通过 xxd -r -p
实现。总体:
echo -n '{"message":"Hello world"}' | iconv -t utf-8 | md5sum | cut -d' ' -f1 | xxd -r -p | base64
输出:
jANzQ+rgAHyf1MWQFSwvYw==
我正在尝试生成 base64 编码的 MD5 哈希。
在Javascript中,我有:
const crypto = require('crypto');
const utf8 = require('utf8');
const hash = crypto.createHash('md5');
const bodyData = JSON.stringify({ message: 'Hello world' });
hash.update(utf8.encode(bodyData)).digest('base64');
导致:
jANzQ+rgAHyf1MWQFSwvYw==
尝试在 shell 中做同样的事情,我有:
echo -n '{"message":"Hello world"}' \
| iconv -t utf-8 \
| md5sum \
| cut -d' ' -f1 \
| base64
导致:
OGMwMzczNDNlYWUwMDA3YzlmZDRjNTkwMTUyYzJmNjMK
我错过了什么?为什么我得到的结果与使用 Javascript 得到的结果不同?
NodeJS 代码 returns Base64 编码的 MD5 散列,而 md5sum
returns the hex encoded MD5 hash, which is then Base64 encoded because of the following base64
.
要获得 NodeJS 代码的结果,必须先对十六进制编码的哈希值进行十六进制解码,然后再进行 Base64 编码。
这可以通过 xxd -r -p
实现。总体:
echo -n '{"message":"Hello world"}' | iconv -t utf-8 | md5sum | cut -d' ' -f1 | xxd -r -p | base64
输出:
jANzQ+rgAHyf1MWQFSwvYw==