我正在编写RSA算法来加密字符串以发送到VisualBasic Web服务。不幸的是,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。
谢谢!
答案 0 :(得分:2)
您需要将密文转换为base 64编码,并在解密之前将其转换回字节。或者你需要将密文视为二进制文件。
没有字符编码会将每个可能的随机字节值用作可打印字符。因此,像现在一样只使用默认字符编码会导致数据丢失。
当数据丢失时,您将收到一个异常,表明密文的大小不正确,或者RSA加密中使用的填充无效。