Java中的可复制加密(可能使用Jasypt)

Java中的可复制加密(可能使用Jasypt),java,security,encryption,cryptography,jasypt,Java,Security,Encryption,Cryptography,Jasypt,我想混淆(*)一些密码以在Java源代码中隐藏它们 我想我应该事先加密密码文本,然后从记住的种子+加密密码中解密源代码。但是,加密过程似乎不可复制:当生成带有 BasicTextEncryptor bte = new BasicTextEncryptor(); bte.setPassword("something"); // the "seed" String ep = bte.encrypt("mypasswordtext") 每次运行时,我都会得到不同的加密密码:例如Zx5RdBLxI

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

我想我应该事先加密密码文本,然后从记住的种子+加密密码中解密源代码。但是,加密过程似乎不可复制:当生成带有

BasicTextEncryptor bte = new BasicTextEncryptor();
bte.setPassword("something"); // the "seed"
String ep = bte.encrypt("mypasswordtext")  
每次运行时,我都会得到不同的加密密码:
例如Zx5RdBLxIB1sPxG7Os3/g4aqqqfy59l8n
v3-D3AZWJAybdqWac9FsjdLgMqkAS9vS
ghsd3wzwjawjk9ghqwflwqmqws9vs

如何使加密重现,以便使用seed加上加密字符串生成真正的密码



(*)我使用“模糊”,因为我知道这根本不是隐藏密码的安全方法,但至少它有助于人们通过浏览源代码来识别密码,同时将其全部包含在源代码文件中。

BasictExtencCryptor将在每次执行加密时生成一个随机salt,并将其包含在输出中,如您在此处所见:。即使密文不同,解密仍应有效

如果希望每次都产生相同的结果,则必须直接设置并配置带有非随机盐生成器的StandardPBEStringEncryptor


然而,正如你在文章末尾提到的,做这两件事都不是好的做法。如果您使用的是“真实世界”应用程序,则应避免将这些机密存储在源代码中。

BasicTextEncryptor将在每次执行加密时生成一个随机salt,并将其包含在输出中,如您所见:。即使密文不同,解密仍应有效

如果希望每次都产生相同的结果,则必须直接设置并配置带有非随机盐生成器的StandardPBEStringEncryptor


然而,正如你在文章末尾提到的,做这两件事都不是好的做法。如果您使用的是“真实世界”应用程序,则应避免将这些机密存储在源代码中。

解密后的密码如何?如果解密后的密码与您期望的密码相同,那么每次加密后的密码是否不同是否重要?(我怀疑是某种随机填充…)您是否尝试用密钥解密加密字符串,以查看是否返回原始密码?这是安全属性。我看不出你为什么要在你的特殊情况下使用确定性加密,因为你想解密这个密码。那么解密后的密码呢?如果解密后的密码与您期望的密码相同,那么每次加密后的密码是否不同是否重要?(我怀疑是某种随机填充…)您是否尝试用密钥解密加密字符串,以查看是否返回原始密码?这是安全属性。我看不出你为什么要在你的特殊情况下使用确定性加密,因为你想解密这个密码。谢谢jamchamb!你是对的解密工作与所有不同的加密密码!我错误地认为加密/解密是一对一的映射,但事实并非如此。(旁注:这可能是/a加密字符串比原始文本长得多的原因。感谢jamchamb!你说得对,解密可以使用所有不同的加密密码!我错误地认为加密/解密是一对一的映射,但事实并非如此。(旁注:这可能是/a加密字符串比原始文本长得多的原因。