我正在尝试使用salt加密密码并将其存储到MySQL数据库中。 我提到了这个stackOverflow question
我的代码与此类似:
private byte[] encrypt(String passwordToSave, byte[] salt)
throws UnsupportedEncodingException
{
int seedBytes = 20;
int hashBytes = 20;
int iterations = 1000;
if(null == salt)
{
SecureRandom rng = new SecureRandom();
salt = rng.generateSeed(seedBytes);
}
PKCS5S2ParametersGenerator kdf = new PKCS5S2ParametersGenerator();
kdf.init(passwordToSave.getBytes("UTF-8"), salt, iterations);
byte[] hash =
((KeyParameter) kdf.generateDerivedMacParameters(8*hashBytes)).getKey();
return hash;
}
我只是改变了这个功能,以便将它用于两个目的。
这个问题是, 我没有收回我存储的内容。 我使用了很多不同的东西,
Base64
进行编码并存储到数据库中并使用相同的方法进行解码。VARBINARY
和BLOB
来保存byte []数据,但没有运气。VARCHAR
并通过使用byte[]
编码类型从中创建新的字符串来存储"UTF-8"
。我是密码学的新手,所以如果我错了,请指出。 提前致谢。 :)
编辑:
我运行加密两次时的输出:
Salt : [34, 17, -80, -59, 93, -90, 37, -25, -11, -43, 44, 1, 10, 7, -66, -108, 97, 36, 95, -116]
First Attempt: [-76, -3, 114, -69, 78, 21, -59, 23, 127, -15, 114, -106, -52, 23, 34, 91, 123, 6, 76, -115]
Second Attempt: [-76, -3, 114, -69, 78, 21, -59, 23, 127, -15, 114, -106, -52, 23, 34, 91, 123, 6, 76, -115]
Salt : [34, 17, -80, -59, 93, -90, 37, -25, -11, -43, 44, 1, 10, 7, -66, -108, 97, 36, 95, -116]