2012-07-18 80 views
0

我有一個字符串(stringToEncrypt),它被AES-128加密並得到一個字節[]。我嘗試將該字節[]作爲字符串寫入數據庫。下面的例子:在java中的AES-128位字節數組到數據庫

String encryptedString = new String(aes.encode(stringToEncrypt.getBytes()));

「編碼」 的方法獲得一個字節[]作爲參數並返回一個字節[]。 「aes」對象使得AES-128編碼過程成爲可能。 問題是,當我嘗試將encryptedString寫入數據庫時​​,寫入數據庫的某些字符與「String encryptedString」不同。我認爲問題是關於數據庫的字符集或我的代碼。有什麼建議嗎?

回答

1

String是你的問題了錯誤的數據類型。如果您確實需要將原始字節編碼爲字符串,請使用base64

如果可以,請嘗試將byte[]直接存儲到數據庫中。

+0

謝謝Otto!我使用Base64作爲aes.encode並將其作爲字符串返回,然後寫入數據庫!非常感謝你。 – user1533833 2012-07-18 07:24:10

+0

不要忘記接受答案 – 2012-07-18 07:31:20

+1

另外,不要使用'String.getBytes()';使用'String.getBytes(「UTF-8」)'。不要使用'String(byte [])'構造函數;使用String(byte [],「UTF-8」)'。 – 2012-07-18 11:01:33

1

是的,它是一個字符編碼問題。我以前在另一個地方見過它。我會base64編碼或將它存儲爲一個大整數。

// byte array[]; 
BigInteger value = new BigInteger(array); 

你可以欺騙的BigInteger,它使用爲Base64的東西太多:

String b64 = value.toString(64); 

BigInteger documentation

+0

謝謝你Wug!我使用Base64作爲aes.encode,並將其作爲字符串返回並解決問題!非常感謝你。 – user1533833 2012-07-18 07:23:36

+0

你應該接受答案。點擊複選標記。 – Wug 2012-07-18 07:31:39

+0

你好Wug,我不能投票,因爲它說「投票要求15聲望」謝謝。 – user1533833 2012-07-25 06:11:08