2013-04-04 36 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));