Java 在存储和检索MySQL时获取不同的加密密码和salt
我正在尝试使用salt加密密码并将其存储到MySQL数据库中。 我提到了这个 我的代码与此类似:Java 在存储和检索MySQL时获取不同的加密密码和salt,java,mysql,encryption,cryptography,bouncycastle,Java,Mysql,Encryption,Cryptography,Bouncycastle,我正在尝试使用salt加密密码并将其存储到MySQL数据库中。 我提到了这个 我的代码与此类似: private byte[] encrypt(String passwordToSave, byte[] salt) throws UnsupportedEncodingException { int seedBytes = 20; int hashBytes = 20; int iterations = 1000;
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
,通过使用“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]
你也在储存盐吗?然后当你第二次加密时,你使用的是同一种盐吗?如果每次使用不同的盐进行加密,将得到不同的结果…是的,我也在保存盐。我只是从数据库中得到不同的值。好的,把数据库完全从等式中去掉-只需使用完全相同的参数连续调用
encrypt
两次,然后显示字节数组输出。@JonSkeet:我只是将字节[]进行sysout。可以吗?不,这不会显示字节-它只会打印类似[B@6d6de4e1
它根本不指示数组的内容。Base64编码它,或使用数组。toString(byte[])
。