在Java中读取加密密码
我在javascript/nodejs中有以下加密密码的代码。我需要用java读取这些密码:在Java中读取加密密码,java,node.js,encryption,passwords,Java,Node.js,Encryption,Passwords,我在javascript/nodejs中有以下加密密码的代码。我需要用java读取这些密码: encryptPassword: function(password, salt) { var salt = new Buffer(salt, 'base64'); return crypto.pbkdf2Sync(password, salt, 10000, 64).toString('base64'); } 我使用此方法创建加密密码进行测试。这是结果(作为java变量): 我尝试使
encryptPassword: function(password, salt) {
var salt = new Buffer(salt, 'base64');
return crypto.pbkdf2Sync(password, salt, 10000, 64).toString('base64');
}
我使用此方法创建加密密码进行测试。这是结果(作为java变量):
我尝试使用以下方法将上述加密代码转换为java:
最后,我使用apache编解码器设置基于64的字符串:
public static String getEncryptedPassword(String password, String salt) throws NoSuchAlgorithmException, InvalidKeySpecException
{
byte[] bytes = Base64.decodeBase64(salt);
byte[] encryptedPassword = getEncryptedPassword(password, bytes);
return Base64.encodeBase64String(encryptedPassword);
}
测试仪如下所示:
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException {
System.out.println(encrypted);
System.out.println(getEncryptedPassword(password, salt));
}
输出是
LtStqkNQjrr+P4V8fGtnauNJNOIB7t35O5I4a4/I9lFUnMR3ckbZyT85g/wO0Da9318Wrql/y1bsY2XdpXqx+Q==
LtStqkNQjro=
如您所见,java代码生成的内容几乎是javascript生成的加密密码的前缀。
我在不同的复杂密码上进行了测试,得到了相同的结果:一个字符串是javascript加密密码的前缀。不同的密码不是彼此的前缀
因此,我认为我非常接近。但是我不知道缺少了什么。您确定Node的“crypto.pbkdf2Sync”与Java的“PBKDF2WithHmacSHA1”(尤其是WithHmacSHA1部分)的算法相同吗?我不是这些算法的专家,但Java版本似乎做了一些散列,因此结果的长度更短
keydlength
参数PBEKeySpec
似乎以位为单位指定密钥大小。js库中类似参数的单位是什么?字节?我想是的。从文档():“PBKDF2应用伪随机函数HMAC-SHA1…”@OlegEstekhin我不确定。java文档或javascript文档中未指定单位。因此,我假设它与位/字节无关,而是与密钥长度(不是特定于语言的术语)有关。docs:java-,byte[],int,int)javascript-您应该已经检查了当您在js中指定64,在java中指定512时会发生什么。第一个base64值是64字节,而第二个是8字节(64位)。
public static String getEncryptedPassword(String password, String salt) throws NoSuchAlgorithmException, InvalidKeySpecException
{
byte[] bytes = Base64.decodeBase64(salt);
byte[] encryptedPassword = getEncryptedPassword(password, bytes);
return Base64.encodeBase64String(encryptedPassword);
}
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException {
System.out.println(encrypted);
System.out.println(getEncryptedPassword(password, salt));
}