2017-08-17 65 views
0

我想模糊處理(*)一些密碼來隱藏他們在Java源代碼。複製的加密(可能與Jasypt)

發現jasypt我以爲預先加密密碼的文本,然後在源代碼從想起種子+加密的密碼進行解密。然而,加密過程似乎不會是可再生的:當

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

生成加密的密碼文本我得到了我每次運行它的時候總是ep不同的加密密碼回:For example Zx5RdBLxIB1sPxG7Os3/G4aqqfy59l8nv3-D3AZWJAybdqWac9FsjdLgMqkAS9vSghsD3wZwJAwjk9ghqwFLwqwgMqkwS9vS

我怎樣才能使加密重複性好,這樣我就可以使用種子加加密字符串以產生真正的密碼?


(*)我用「模糊」,因爲我知道,這是不是隱藏密碼都以安全的方式,但至少它可以幫助人們無法僅僅通過glaning發現密碼在源代碼中,同時保持它包含在源代碼文件中。

+1

解密密碼怎麼樣?如果加密密碼每次都是不同的,如果預期的密碼是預期的密碼? (我懷疑某種隨機填充....) –

+0

您是否嘗試使用密鑰對加密的字符串進行解密,以查看您是否恢復原始密碼? –

+0

這是安全屬性。我沒有看到你想在你的特殊情況下需要確定性加密的原因,因爲你想解密這個密碼。 –

回答

2

的BasicTextEncryptor會產生一個隨機鹽每次輸出進行加密,包括它的時候,你可以在這裏看到:http://www.jasypt.org/api/jasypt/1.9.0/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#encrypt(java.lang.String)。即使密文不相同,解密仍然可以工作。

如果你想每次都產生相同的結果,你必須直接設置和配置StandardPBEStringEncryptor與非隨機鹽生成。

但是,它不會是很好的做法,無論是做這些事情,你提到你的帖子的末尾。如果您正在研究「真實世界」應用程序,則應該避免將這些機密存儲在源代碼中。

+0

謝謝jamchamb!你是正確的解密工程與所有不同的加密密碼!我誤解了加密/解密是一對一的映射,但事實並非如此。 (注意:這可能是加密字符串比原始文本長得多的原因之一。 – halloleo