Java Windows-1252错误的字符

时间:2014-11-07 11:01:01

标签: 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) {
    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。

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要将密文转换为base 64编码,并在解密之前将其转换回字节。或者你需要将密文视为二进制文件。

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

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