Java Windows-1252错误的字符

Java Windows-1252错误的字符,java,vb.net,encryption,character-encoding,windows-1252,Java,Vb.net,Encryption,Character Encoding,Windows 1252,我正在编写一个RSA算法,对发送到VisualBasic Web服务的字符串进行加密。不幸的是,VB RSAcryptoserviceprovider总是给我一个异常“坏数据”,我认为问题在于编码。 VisualBasic代码接收字符串并使用windows-1252编码将其转换为字节数组,然后对其进行解密 在我的Java代码中,我使用以下方式进行加密: private static String encryptBlock(Cipher cipher, String textToEncrypt)

我正在编写一个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进行更改


谢谢大家!

您需要将密文转换为base 64编码,并在解密之前转换回字节。或者你需要继续把密文当作二进制

没有将所有可能的随机字节值用作可打印字符的字符编码。因此,像现在这样只使用默认字符编码将导致数据丢失


当数据丢失时,您将收到一个异常,表明密文的大小不正确,或者RSA加密中使用的填充无效。

我认为Windows-1252不包含� 字符-可能用UTF-8或UTF-16编码。“新字符串(cipher.doFinal(textToEncrypt.getBytes(Charset.defaultCharset()),“windows-1252”);”如果我把它打印出来,它会给我一些� 字符指定不同的字符集,然后查看输出是否更改。输出总是不同的,因为它是RSA密码。但是使用UTF-8和UTF-16� 字符总是出现。您是否尝试过更改
Charset.defaultCharset()
?但是VisualBasic代码需要一个包含128个字符和windows-1252编码的字符串。Base 64返回172个字符的长度。您要么确保这些字符直接映射到字节,要么修复VB代码。没有办法解决这个问题。你如何输入VB字符串?你所说的“输入VB字符串”是什么意思?好吧,密文必须存储/检索,或者以其他方式从Java代码传输到VB代码。。。