在Android中,我有一个文本字符串,我以这种方式读取(它的字节):
String b = "7af18klmo02";
byte[] b=udid.getBytes("UTF-8");在此之后,我使用公钥以这种方式对字符串进行加密:
c = Cipher.getInstance("RSA/ECB/NoPadding");
c.init(Cipher.ENCRYPT_MODE, pubKeyNew);
encodeFile = c.doFinal(b);在此之后,我尝试以这种方式在控制台上打印“加密结果”:
String criptato = null;
try {
criptato = new String(encodeFile, "UTF8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("ENCRYPTED STRING: "+criptato);
System.out.println("LENGTH: "+criptato.length());我得到的是:
ENCRYPTED STRING: (unreproducible characters)
LENGTH: 244输出控制台中有许多无法读取的字符。我并不打算改变它们,我认为我应该使用一些特殊的编码来避免这种情况。
但是当我使用NDEF消息通过NFC发送加密的字符串时,我在Java端获得了一个我无法理解的不同的“字符串”:
\x12\t\xc7NL\xb9\xee\xb3\xae\xe4\xa5\xe5\x88\x93\xd6\\=S\xff\xa0'\xf1\xd0\x87\x8bF\xb0\x0cT!\xd6\xca0\x8b\xe5\x13\xfd\x85\xc3=Z,u1\x14}d\x0b5\xe7\x0bBY\xe7$\xee\xc0Z\x150;r\xfa\xce\x93\x90\x0b\xdas\xe6o\xe8\x954._\x93\xa4\xc2\x06\xe3\x84\xf5\xdbw\x91\xd4'%\xf71\xf3B\x9eA=f\r\xaeu\xe5m\x1en\xdaw\x12\xad+\xfe\xb2\x91;\xbe\t\x1dTd\xf5m\t2\xafl<v\xf0\x06\x98)2]\xbeV\x86\xa7\xe7\xe6\xc3\x1f*b\x8c&\xd8ho\x18\x8a;\x8f\x8cW\xb6\x88A\xc9`^\xc2>\xfcQ\x07\x86\xb3\x82\x16\x8b\xed?\xae\xb0\x9bT<\x84y4/\xef\xf9j\xf2\xff\x17\x8d\xfddQN\x84\x97\xf2z\x88RJtw\xe2F5\xcd=l`\x89\xeaN\x86a\xde\xa4\xdb\xb1\x15x\xe4\xf0.\x06\x03\x16|\xfee\xbf\x8a\x81_\x86\xbc\x83\xd9 \xbc;\x16V.]\xb4\xf9\t>?{\xcdF\xa8\x82\x08\xe0\\L
LENGTH: 700我在Ubuntu 13.04下运行
这是ISO 8859-15编码还是什么?
为什么最终长度是700而不是原来的244?
如何将这些字符转换为UTF-8格式,以便对它们进行解密以获得原始字符串?
任何帮助都是非常感谢的。
发布于 2015-06-26 18:25:05
这是不完整的代码:
criptato = new String(encodeFile, "UTF8"); encodeFile的内容不是UTF8编码的文本。它不是任何编码的文本--它是任意的二进制数据。当您有任意二进制数据时,不要使用构造函数将byte[]转换为String,就像这样。
相反,将其转换为十六进制或base64。它们都明确地设计为将任意二进制数据编码为ASCII文本,以便稍后可以将其解码为原始的二进制数据。
https://stackoverflow.com/questions/31070753
复制相似问题