2016-07-29 101 views
2

我遇到以下问题:我尝试将一些字符串str转换为md5 bytestring hash。在PHP中,我们可以使用md5(str, true),但在JS(nodejs express)中,我无法找到某种方式来接收相同的结果。我已经包含npm模块js-md5,但arrayBuffer该模块的方法返回另一个结果(不同于PHP md5(str,true))。NodeJS md5'bytestring'like PHP md5(str,true)

请问有人能帮助我。

感谢

回答

0

使用CryptoJS模块: NPM link here

而且做这样的事情:

// Requires 
var crypto = require('crypto'); 

// Constructor 
function Crypto() { 
    this.hash; 
} 

// Hash method 
Crypto.prototype.encode = function(data) { 
    this.hash = crypto.createHash('md5').update(data); 
    var result = this.hash.digest('hex'); 
    return result; 
}; 

// Comparison method (return true if === else false) 
Crypto.prototype.equals = function(data, model) { 
    var bool = false; 
    var data = data.toUpperCase(); 
    var model = String(model).toUpperCase(); 
    if (data == model){ 
     bool = true; 
    } else { 
     bool = false; 
    } 
    return bool; 
}; 

// Exports 
module.exports = Crypto; 

然后在你的代码和使用方法,实例化这个 “工具” 对象。
简单易用,同样的事情可以用AES,SHA256等其他加密方法完成。
关于raw_output选项(二进制答案,填充16位),您可以轻松地将返回的二进制格式的变量与一个简单的功能,见this SO post知道如何。 玩得开心。

0

简短的回答:

const crypto = require('crypto'); 
const buffer = crypto.createHash('md5').update(str).digest(); 

龙答:你需要使用的NodeJS的默认crypto模块(不需要这里的依赖),其中包含效用函数和类。它能够使用同步或异步方法为您创建散列(例如MD5或SHA-1散列)。一个名为crypto.createHash(algorithm)的简短实用程序函数可用于创建具有最少编码的散列。 As the docs specified:

algorithm取决于平台上OpenSSL版本支持的可用算法。示例是'sha256','sha512'等。在最近发布的OpenSSL中,openssl list-message-digest-algorithms将显示可用的摘要算法。现在

,这createHash函数返回一个Hash对象,其可与一个流中使用(可以喂它一个文件,HTTP请求等)或字符串,因为你问。如果您想使用字符串,请使用hash.update(string)对其进行散列。此方法返回散列本身,因此您可以将其与.digest(encoding)链接以生成字符串(如果设置了encoding)或Buffer(如果不是)。既然你问了字节,我相信Buffer是你想要的(Buffer s是Uint8Array实例)。

+0

你是对的,我写这个很匆忙,忘记了。请让我编辑我的答案。 – Iso

+0

现在你的答案比旧的好多了,我删除了我以前的评论。谢谢 ;)。 附加信息:不要尝试消化散列两次,否则会出现错误。散列只能被摘要一次。例如,如果比较两个密码,请注意对象的类型(如果它来自输入,可能是字符串,但如果它来自像数据库结果集这样的对象,则为对象属性),这就是为什么我创建了“equals “方法(受Java中的.equals()启发)。 – Aethyn