我只是想知道是否有可能强制加密器始终为相同的输入返回相同的加密值。

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);

最佳答案

the documentation of StandardPBEStringEncryptor所述,


  如果使用随机盐生成器,则加密的两个结果
  相同的消息总是不同的(随机情况除外)
  盐巧合)。


如果您未明确设置盐生成器,则随机盐生成器确实是默认值。

出于单元测试的目的,您可以设置一个盐生成器,使用ZeroSaltGenerator返回相同输入(或始终返回相同盐)的相同盐,例如encryptor.setSaltGenerator(mySaltGenerator);

但是,请确保这不会渗入您的真实代码-仅在测试时这样做。

10-06 09:36