2013-04-17 46 views
1

我們的安全部門希望我們使用256位加密來SSN,用戶等的名稱,所以我們決定一起去JASYPT與下面的示例代碼:Jasypt加密的字符串不能夠解密另一臺機器

encryptor = new StandardPBEStringEncryptor(); 
encryptor.setProvider(new BouncyCastleProvider()); 
encryptor.setAlgorithm("PBEWITHSHA256AND256BITAES-CBC-BC"); 
encryptor.setPassword(OUR_KEY) 
encryptor.encrypt("TEXT TO ECNCRYPT") 

我們注意到的問題是,當我們的應用程序從本地機器創建加密記錄時,即使密鑰相同,app-dev服務器上的應用程序也無法解密,反之亦然。看起來JASYPT似乎在鹽中添加了一些機器特定的信息(Mac地址等)。

即使使用FixedStringSaltGeneratorZeroSaltGenerator也沒有幫助。這給我們帶來了一個問題,因爲如果我們將生產服務器遷移到另一臺機器,或者使用prod數據刷新產前數據,我們可能需要幾百萬年來恢復信息。

安全部門希望我們使用一個知名的庫,而不是釀造一個內部的解決方案。有人可以在這個問題上談一談我們如何生成可以使用jasypt 256位加密在不同機器上解密的加密字符串,或者當我們使用prod數據刷新預產品數據庫時,我們將如何恢復名稱等那是通過不同的服務器加密的?

任何有用的見解將不勝感激。

+0

您的機器是否有不同的字節順序?驗證machine1上的加密字節數組與machine2上的加密字節數組是否相同;您可能需要使用[ByteBuffer](http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/ByteBuffer.html)之類的內容來匹配它們。 –

+0

「*我們可能需要幾百萬年的時間來恢復信息*」>經典...從我這裏竊笑:-) –

+0

感謝O'Pootertoot。一半的問題已解決。我們的本地環境是小端的窗口,服務器是大端的solaris。我們確認,我們可以在多臺Windows機器或我們的開發和測試服務器上加密/解密數據,但是當數據在Windows上加密並在服務器上解密時,它不起作用。我想知道Jasypt是否提供瞭解決這個問題的方法。 –

回答

0

我知道這是一個相當古老的問題,但我最近遇到了這個問題,對於我的解決方案與機器操作系統字節序的差異沒有任何關係。

它必須處理密碼本身的字符,美元符號字符($),這在某種程度上被認爲是Linux中的特殊字符,而不是在Windows中被認爲是特殊字符。因此,一切工作都很好加密Windows中的值,但是當我交換到Linux並嘗試使用jasypt命令行decrypt.sh腳本使用相同密碼解密值時,我收到錯誤消息「Operation not possible(Bad input or or參數)「,並注意到jasypt解密輸出參數列表中的密碼與我輸入的密碼不同(該腳本明顯從特殊字符直到密碼字符串的末尾切掉密碼部分)。

無論如何,我的解決方案是更改密碼不使用特殊字符,然後它的工作。希望這能幫助一些在未來遇到同樣問題的可憐的靈魂,因爲我浪費了兩天的時間。

0

使用單引號代替雙引號來包裝輸入字符串。這個解決方案工作時,我有一個加密和解密與$字符串的問題。