我們的安全部門希望我們使用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地址等)。
即使使用FixedStringSaltGenerator
或ZeroSaltGenerator
也沒有幫助。這給我們帶來了一個問題,因爲如果我們將生產服務器遷移到另一臺機器,或者使用prod數據刷新產前數據,我們可能需要幾百萬年來恢復信息。
安全部門希望我們使用一個知名的庫,而不是釀造一個內部的解決方案。有人可以在這個問題上談一談我們如何生成可以使用jasypt 256位加密在不同機器上解密的加密字符串,或者當我們使用prod數據刷新預產品數據庫時,我們將如何恢復名稱等那是通過不同的服務器加密的?
任何有用的見解將不勝感激。
您的機器是否有不同的字節順序?驗證machine1上的加密字節數組與machine2上的加密字節數組是否相同;您可能需要使用[ByteBuffer](http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/ByteBuffer.html)之類的內容來匹配它們。 –
「*我們可能需要幾百萬年的時間來恢復信息*」>經典...從我這裏竊笑:-) –
感謝O'Pootertoot。一半的問題已解決。我們的本地環境是小端的窗口,服務器是大端的solaris。我們確認,我們可以在多臺Windows機器或我們的開發和測試服務器上加密/解密數據,但是當數據在Windows上加密並在服務器上解密時,它不起作用。我想知道Jasypt是否提供瞭解決這個問題的方法。 –