【问题标题】:nodejs md5 with raw_output like md5(data, raw_output) in phpnodejs md5 with raw_output like md5(data, raw_output) in php
【发布时间】:2017-06-28 03:04:49
【问题描述】:

md5 在 php 中:

md5 ( 字符串 $str [, bool $raw_output = false ] )

如果可选的 raw_output 设置为 TRUE,则 md5 摘要将以长度为 16 的原始二进制格式返回。

所以你可以在 php 中执行以下操作:

$ php -a
>>> md5('data', true)
=> b"ìw\x7F8]=■╚ü] ¸I`&▄"

我尝试在 nodejs 中使用加密:

$ node
>>> crypto.createHash('md5').update('data').digest('binary')
'w8]=þÈ] ÷I`&Ü'

但结果不一样

我想在nodejs中用raw_output选项加密数据,如何实现?

【问题讨论】:

标签: php node.js


【解决方案1】:

您将编码设置为“二进制”,改用“十六进制”

crypto.createHash('md5').update('data').digest('hex')

https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding

【讨论】:

  • 它返回 '8d777f385d3dfec8815​​d20f7496026dc',还是不一样
  • 怎么不一样?
  • 如果是单引号还是双引号,那么 repl 就是这样显示的。你可以忽略它,字符串匹配
  • 我想在nodejs中使用raw_output选项加密数据,结果应该是二进制ìw\x7F8]=■╚ü] ¸I&▄`而不是8d777f385d3dfec8815d20f7496026dc
  • 它是二进制的。它在 repl 中如何显示并不重要,它是相同的位。如果您对两个二进制输出进行 base64 编码,它们将匹配。在节点摘要中,使用.digest() 获取Buffer,或.digest('base64')
【解决方案2】:

所有这些都一样:

Mac OS command line:  md5 -q -s "my string" | xxd -p -r | openssl base64

PHP: $hash = md5("my string", true); $result = base64_encode($hash);

Node.JS:  crypto.createHash('md5').update("my string", "binary").digest('base64');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 2015-02-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多