0

我正在编写 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。

谢谢!

4

1 回答 1

2

您需要将密文转换为 base 64 编码,并在解密之前转换回字节。要么,要么您需要继续将密文视为二进制。

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

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

于 2014-11-07T11:48:05.100 回答