2014-07-09 43 views
0

我有一個應用程序使用Java javax.crypto包加密字符串並將它們存儲在postgresql數據庫中。我們需要從postgres SQL解密這些字符串。我知道postgresSQL包pgcrypto,但我不知道應該使用哪個pgcrypto函數來解密字符串。 java代碼使用Crypto「PBEWithMD5AndDES」算法,我無法在pgcrypto包中找到相應的算法。使用Postgres SQL解密PBE加密密碼

例如,如果私鑰是'a_private_key',那麼應用程序代碼使用以下函數來生成密鑰並加密字符串。

SecretKey secretKey = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(new PBEKeySpec("a_private_key".toCharArray())); 
Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES") 
cipher.init(Cipher.ENCRYPT_MODE, secretKey, 
      new PBEParameterSpec(
       new byte[] { (byte) 0x30, (byte) 0x31, (byte) 0x32, (byte) 0x33, 
          (byte) 0x34, (byte) 0x35, (byte) 0x36, (byte) 0x37, }, 
       15); 
byte[] crypted = cipher.doFinal("StringToEncrypt".getBytes(UTF8)); 
+1

我記得前些時候廣泛閱讀了另一個問題,但我找不到它。基本上,PBE算法中使用的密鑰派生函數是非標準的,除Java之外,您不會在任何地方找到它們。 – ntoskrnl

+1

從Java文檔http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html PBEWithMD5AndDES:RSA實驗室中定義的基於密碼的加密算法,「PKCS#5:密碼 - 基於加密標準「,版本1.5,1993年11月。注意,該算法暗示CBC作爲密碼模式並且PKCS5Padding作爲填充方案,並且不能與任何其他密碼模式或填充方案一起使用。順便說一句,如果你真的需要加密,那麼DES可能不夠好。 – Eelke

+0

感謝您的回答,看起來像我現在需要重新考慮設計。對不起,但我不知道如何評論你的答案。 – user1232555

回答

0

現在結束這個問題,因爲ntoskml和Eilke的評論是正確的; PBE是一種java密碼學,因此我無法從Postgresql解密它。 所以最終我不得不提出一個Java/JDBC解決方案來解決這個問題。