求诸位大牛帮忙解答关于MD5疑问
发布于 8 年前 作者 jakehu 3792 次浏览 来自 问答

在php中有一段代码,如下:

base64_encode(md5('123456',true))

上面的结果是:4QrcOUm6Wau+VuBX8g+IPg==

现在问题来了,怎样用nodejs将”123456“加密成上面的结果? 求指教、、、

5 回复

大致写了下:

'use strict';
const crypto = require('crypto');

function md5(str, boolean) {
	var md5 = crypto.createHash('md5');
	var strBuffer = Buffer.isBuffer(str) ? str : new Buffer(str);
	md5.update(strBuffer);
	//如果boolean为true,则返回16字符二进制数,否则返回32位16进制数
	if (boolean)
    		return md5.digest('binary');
	return md5.digest('hex');
}

//调用方法和php基本一致
const str = new Buffer(md5('123456', true), 'binary').toString('base64');
//输出可得4QrcOUm6Wau+VuBX8g+IPg==
console.log(str);

可以把md5函数写在项目的utils里面去,当然想和php完全一样,那么对base64转化的函数也可以封装起来,这样就能和php的写法完全一样,当然个人感觉没必要~

@hyj1991 md5 对于确定的输入有确定的输出, base64 只是一种编码, 所以说不应该不一样的.

@magicdawn 问题是,php的md5方法,确实就有2种输出 我们正常使用的确实一般都是32位16进制,但是php的md5方法,第二个参数为true时,输出的16位二进制流,所以我给lz写的方法增加了php的第二个参数,不然就得不到他上面用php计算得到的结果 详细可以参见: http://www.w3school.com.cn/php/func_string_md5.asp

@hyj1991 感谢,非常感谢

回到顶部