2013-04-04 87 views
0

我有一個小問題,將類型從byte[]改爲String,然後從String改爲byte[]。當我使用我的代碼時,它會返回RSA錯誤「rsa塊的數據太多」。但是當我使用原來的byte[]時,它工作正常。byte [] to字符串和字符串到字節[]

這是它如何工作的:

cipherData = cipher.doFinal(cipherData); 

我試圖改變數據類型:

// Byte[] to String 
String encrypted = new String(cipherData, "UTF-8"); 
// RSA Operation 
cipherData = cipher.doFinal(encrypted.getBytes()); 
+0

嗯,語言? – Stuart 2013-04-04 16:52:47

+3

我不明白。 'String encrypted = new String(cipherData,「UTF-8」)'行不會對'cipherData = cipher.doFinal(cipherData)'行產生任何影響。 – 2013-04-04 16:52:53

+0

你是對的。改變了它。但錯誤仍然存​​在。我也嘗試過使用StringBuffer。它不起作用。 – JavaForAndroid 2013-04-04 16:55:35

回答

7

這就是問題所在:

String encrypted = new String(cipherData, "UTF-8"); 

cipherData UTF-8編碼的文本。它是任意的二進制數據。所以不要試圖解釋它,就好像它是 UTF-8文本。

而是使用hex或base64 - 其中base64可能是最簡單的方法。我喜歡public domain iHarder base64 library

String encrypted = Base64.encodeBytes(cipherData); 
... 

cipherData = Base64.decode(encrypted); 

編輯:如果您使用,當然Android的,然後使用built-in library :)

+1

爲什麼要使用iHarder而不是內置的Convert類支持? – MrMoDoJoJr 2013-04-04 17:02:39

+0

如果我想使用這樣的庫,我必須看看Android Base64庫。圖書館是否也支持解密? – JavaForAndroid 2013-04-04 17:02:59

+0

謝謝。我將在Android上檢查Base64的API。 – JavaForAndroid 2013-04-04 17:04:28

0

我完美的作品。這裏是Android Base64庫的代碼:

String encrypted = Base64.encodeToString(cipherData, Base64.DEFAULT); 
cipherData = cipher.doFinal(Base64.decode(encrypted, Base64.DEFAULT));