我正在编码一个RSA算法来加密一个字符串以发送到一个VisualBasic RSA服务。不幸的是,VB RSAcryptoserviceprovider总是给我一个例外“坏数据”和我这个问题是编码。VisualBasic代码接收字符串并使用windows-1252编码将其转换为字节数组,并对其进行解密。
在我的Java代码中,我使用以下方法进行加密:
private static String encryptBlock(Cipher cipher, String textToEncrypt) {
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
String encrypted = new String(cipher.doFinal(textToEncrypt.getBytes(Charset.defaultCharset())), "windows-1252");
return encrypted;
}当我'system.out.print‘加密字符串时,它会给我一些奇怪的字符,比如�。这是否意味着我的windows-1252编码是错误的?我在这里做错什么了?请注意,我只能更改Java代码,而不能更改VB。
谢谢!
发布于 2014-11-07 11:48:05
您需要将密文转换为基64编码,并在解密前返回到字节。或者你需要继续把密文当作二进制。
没有字符编码会使用所有可能的随机字节值作为可打印字符。因此,像现在这样只使用默认字符编码将导致数据丢失。
当数据丢失时,您将得到一个异常,指示密文的大小不正确,或者RSA加密中使用的填充无效。
https://stackoverflow.com/questions/26799782
复制相似问题