0

VisualBasic Web サービスに送信する文字列を暗号化する RSA アルゴリズムをコーディングしています。残念ながら、VB RSAcryptoserviceprovider は常に「Bad data」という例外を返します。これはエンコードに問題があります。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 に答える