Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用SHA-256和salt创建用于密码哈希的Java方法的Javascript模拟_Java_Javascript_Node.js_Salt_Pbkdf2 - Fatal编程技术网

无法使用SHA-256和salt创建用于密码哈希的Java方法的Javascript模拟

无法使用SHA-256和salt创建用于密码哈希的Java方法的Javascript模拟,java,javascript,node.js,salt,pbkdf2,Java,Javascript,Node.js,Salt,Pbkdf2,为了完成下一个目标,我已经苦苦挣扎了一段时间: 我有一个“重置密码”页面,应该向服务器发送新密码。我想把它和盐混在一起,这样我最终可以把它保存在DB中。在服务器端,我有下一个创建密码哈希的方法: 公共静态字符串makeHash(字符串密码、字符串salt){ 试一试{ MessageDigest md=MessageDigest.getInstance(“SHA-256”); md.update(password.getBytes(“UTF-8”); byte byteData[]=md.dig

为了完成下一个目标,我已经苦苦挣扎了一段时间: 我有一个“重置密码”页面,应该向服务器发送新密码。我想把它和盐混在一起,这样我最终可以把它保存在DB中。在服务器端,我有下一个创建密码哈希的方法:

公共静态字符串makeHash(字符串密码、字符串salt){
试一试{
MessageDigest md=MessageDigest.getInstance(“SHA-256”);
md.update(password.getBytes(“UTF-8”);
byte byteData[]=md.digest(makeHash(salt.toLowerCase());
返回Base64.getEncoder().encodeToString(byteData);
}捕获(无此算法异常|不支持编码异常e){
log.error(“无法对pass进行散列。没有散列。”,e);
}
返回密码;
}
私有静态字节[]makeHash(字符串val)抛出NoSuchAlgorithmException、UnsupportedEncodingException{
返回MessageDigest.getInstance(“SHA-256”).digest(val.getBytes(“UTF-8”));
}
我尝试了几个Javascript库——crypto、crypto js、SJCL,但无法创建与Java方法生成的密码相同的密码。例如,上一次工作尝试是:

var crypto=require('crypto');
crypto.pbkdf2('123','test@gmail.com'1000,60,'sha256',函数(错误,键){
如果(错误)
犯错误;
console.log(key.toString('Base64'));/“c5e478d…1469e50”
});
它生成了这个散列-
qr2lzotlrwj7bejefoomrj64aumptb3prhwlmfncl4dcavalfigoqziyexzno5i/icAUYoMjy73jSTd
,而Java给了我-
/pyqf3jc5xoczfsy4lub+y0DONGMl/AFzLiBTo8LA=


我不能改变后端,因为它已经运行了一段时间,所以我希望有人能帮我解决这个问题

两边都必须使用相同的算法。在Java中,您只使用SHA-256,在node中,您将PBKDF2与SHA-256一起使用

js的加密模块提供了该功能。您可以在其中直接指定SHA-256。PBKDF2是一种只在后台使用不同散列函数的算法

如果您想要散列密码,那么使用PBKDF2进行大量迭代(>86000)和随机存储在密码散列旁边会更安全

Java在其标准库中支持PBKDF2

如果您确实想直接使用SHA-256,并且我强烈建议您不要这样做,那么您可以使用以下代码:

var crypto = require('crypto');
var key = "123";
var salt = "test@gmail.com";

key = crypto.createHash('sha256')
        .update(key, "utf8")
        .update(makeHash(salt))
        .digest("base64");

console.log(key);

function makeHash(val) {
    return crypto.createHash('sha256').update(val, "utf8").digest();
}
输出:

/pyQf3JCj5XoczfsYJ4LUb+y0DONGMl/AFzLiBTo8LA=

请注意,
Hash.digest()
采用可选的输出编码,而不是附加数据。

您必须在两侧使用相同的算法。在Java中,您只使用SHA-256,在node中,您将PBKDF2与SHA-256一起使用

js的加密模块提供了该功能。您可以在其中直接指定SHA-256。PBKDF2是一种只在后台使用不同散列函数的算法

如果您想要散列密码,那么使用PBKDF2进行大量迭代(>86000)和随机存储在密码散列旁边会更安全

Java在其标准库中支持PBKDF2

如果您确实想直接使用SHA-256,并且我强烈建议您不要这样做,那么您可以使用以下代码:

var crypto = require('crypto');
var key = "123";
var salt = "test@gmail.com";

key = crypto.createHash('sha256')
        .update(key, "utf8")
        .update(makeHash(salt))
        .digest("base64");

console.log(key);

function makeHash(val) {
    return crypto.createHash('sha256').update(val, "utf8").digest();
}
输出:

/pyQf3JCj5XoczfsYJ4LUb+y0DONGMl/AFzLiBTo8LA=

请注意,
Hash.digest()
采用可选的输出编码,而不是附加数据。

您必须在两侧使用相同的算法。在Java中,您只使用SHA-256,在node中,您将PBKDF2与SHA-256一起使用

js的加密模块提供了该功能。您可以在其中直接指定SHA-256。PBKDF2是一种只在后台使用不同散列函数的算法

如果您想要散列密码,那么使用PBKDF2进行大量迭代(>86000)和随机存储在密码散列旁边会更安全

Java在其标准库中支持PBKDF2

如果您确实想直接使用SHA-256,并且我强烈建议您不要这样做,那么您可以使用以下代码:

var crypto = require('crypto');
var key = "123";
var salt = "test@gmail.com";

key = crypto.createHash('sha256')
        .update(key, "utf8")
        .update(makeHash(salt))
        .digest("base64");

console.log(key);

function makeHash(val) {
    return crypto.createHash('sha256').update(val, "utf8").digest();
}
输出:

/pyQf3JCj5XoczfsYJ4LUb+y0DONGMl/AFzLiBTo8LA=

请注意,
Hash.digest()
采用可选的输出编码,而不是附加数据。

您必须在两侧使用相同的算法。在Java中,您只使用SHA-256,在node中,您将PBKDF2与SHA-256一起使用

js的加密模块提供了该功能。您可以在其中直接指定SHA-256。PBKDF2是一种只在后台使用不同散列函数的算法

如果您想要散列密码,那么使用PBKDF2进行大量迭代(>86000)和随机存储在密码散列旁边会更安全

Java在其标准库中支持PBKDF2

如果您确实想直接使用SHA-256,并且我强烈建议您不要这样做,那么您可以使用以下代码:

var crypto = require('crypto');
var key = "123";
var salt = "test@gmail.com";

key = crypto.createHash('sha256')
        .update(key, "utf8")
        .update(makeHash(salt))
        .digest("base64");

console.log(key);

function makeHash(val) {
    return crypto.createHash('sha256').update(val, "utf8").digest();
}
输出:

/pyQf3JCj5XoczfsYJ4LUb+y0DONGMl/AFzLiBTo8LA=

请注意,
Hash.digest()
采用可选的输出编码,而不是额外的数据。

我曾尝试使用类似这样的SHA-256算法创建哈希,并尝试模仿Java方法,但失败了。因此,我得到了
jue2zsvbnfklmjbclyu5reeln0vizyfrieveq08lqjglqtbkjtfgjtngjtzgjtfgjuewjtdfjtk5jtfjtgg2juy3juy3juy3jueyeivfmw=
添加了完整的代码示例,但我强烈建议不要直接使用SHA-256对密码进行哈希运算。非常感谢。我错过了一件小事,而且非常接近——你们节省了我很多时间:)我尝试用SHA-256算法创建哈希,就像这样——并尝试模仿Java方法,但我失败了。因此,我得到了
jue2zsvbnfklmjbclyu5reeln0vizyfrieveq08lqjglqtbkjtfgjtngjtzgjtfgjuewjtdfjtk5jtfjtgg2juy3juy3juy3jueyeivfmw=
添加了完整的代码示例,但我强烈建议不要直接使用SHA-256对密码进行哈希运算。非常感谢。我错过了一件小事,而且非常接近——你们节省了我很多时间:)我尝试用SHA-256算法创建哈希,就像这样——并尝试模仿Java方法,但我失败了。因此,我得到了
jue2zsvbnfklmjbclyu5reeln0vizyfrive