我只是想知道是否可以强制加密器始终为同一输入返回相同的加密值。
StandardPBEStringEncryptorencryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("My password");
encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
String value1 = encryptor.encrypt("encryptme")
String value2 = encryptor.encrypt("encryptme")
String value3 = encryptor.encrypt("encryptSomethingElse")
assertEquals(value1,value2);
assertNotEquals(value1,value3);
答案 0 :(得分:1)
如the documentation of StandardPBEStringEncryptor
所述,
如果使用随机盐生成器,则会产生两个加密结果 相同的消息将始终不同(除非是随机的 盐巧合)。
如果没有明确设置salt生成器,那么随机盐生成器确实是默认值。
出于单元测试的目的,您可以设置一个salt生成器,使用ZeroSaltGenerator
为同一输入返回相同的salt(或始终返回相同的salt),如encryptor.setSaltGenerator(mySaltGenerator);
p>
但请确保这不会渗透到您的真实代码中 - 只能用于测试。