Java 中的可重现加密(可能使用 Jasypt)

Reproducible encryption in Java (possibly with Jasypt)

我想混淆(*)一些密码以将它们隐藏在Java源代码中。

发现jasypt我以为我事先加密了密码文本,然后用记住的种子+加密密码在源代码中解密。但是,加密过程似乎无法重现:生成加密密码文本时

BasicTextEncryptor bte = new BasicTextEncryptor();
bte.setPassword("something"); // the "seed"
String ep = bte.encrypt("mypasswordtext")  

我每次 运行 都输入 ep 总是不同的加密密码:For example Zx5RdBLxIB1sPxG7Os3/G4aqqfy59l8nv3-D3AZWJAybdqWac9FsjdLgMqkAS9vSghsD3wZwJAwjk9ghqwFLwqwgMqkwS9vS.

如何使加密可重现,以便我可以使用种子加上加密字符串来生成真实密码?


(*) 我使用 "obfuscate",因为我知道这根本不是隐藏密码的安全方法,但至少它有助于人们无法仅通过 [=27] 发现密码=]glaning 在源代码中,同时将其全部包含在源代码文件中。

BasicTextEncryptor 将在您每次执行加密时生成随机盐并将其包含在输出中,如您在此处所见:http://www.jasypt.org/api/jasypt/1.9.0/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#encrypt(java.lang.String)。即使密文不同,解密应该仍然有效。

如果您想每次都产生相同的结果,您必须直接设置和配置一个带有非随机盐生成器的 StandardPBEStringEncryptor。

但是,正如您在 post 末尾提到的那样,做这两件事都不是好的做法。如果您正在开发 "real-world" 应用程序,则应完全避免将这些秘密存储在源代码中。