1

JavaでRSA Base64でエンコードされた文字列を復号化すると、いくつかの問題に直面しています.RSAで暗号化された文字列はc#.Netによって作成されます。

実は、javaを使って公開鍵と秘密鍵を作成しました。次に、公開鍵を .Net Team に交換しました。RSACryptoServiceProviderクラスを使用して公開鍵を使用して文字列を暗号化しました。

.ネットコード:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(keySize);
rsa.FromXmlString(publicKey);
.......
.......
byte[] encryptedBytes = rsa.Encrypt(tempBytes, false);
Array.Reverse(encryptedBytes);
stringBuilder.Append(Convert.ToBase64String(encryptedBytes));

Java 復号化コード:

   public static void doDecrypt( BigInteger  modules, BigInteger  d , String encrypted )
    {
            try {
                    byte[] decodedBytes = Base64.decodeBase64( encrypted );
                    KeyFactory factory = KeyFactory.getInstance("RSA");
                    Cipher cipher = Cipher.getInstance("RSA");

                    RSAPrivateKeySpec privSpec = new RSAPrivateKeySpec(modules, d);
                    PrivateKey privKey = factory.generatePrivate(privSpec);

                    cipher.init(Cipher.DECRYPT_MODE, privKey);
                    byte[] decrypted = cipher.doFinal(decodedBytes) ;
                    System.out.println("decrypted: " + new String(decrypted));
            }
            catch (Exception e) {
                    e.printStackTrace();
            }

    }

文字列の復号化中に、次のエラーが表示されます。

javax.crypto.BadPaddingException: Data must start with zero
   at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:308)
   at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255)
   at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
   at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
   at javax.crypto.Cipher.doFinal(DashoA13*..)

それから、私は

 Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");

しかし、それは私が望むプレーンテキストに関連付けることができなかったジャンク文字を与えます. 私は、どこかで何かをするのに欠けていると思います.これについて私を導いてください.

4

1 に答える 1

-1
rsa.Encrypt(tempBytes, false)

PKCS#1v1.5パディングにつながります。したがって、Java側でも同じものを使用する必要があります。使用してみてください

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Windows APIはデフォルトでECBを使用していると思いますが、CBCやCFBなどの他のモードも試してみることをお勧めします。

于 2012-09-22T17:22:25.147 に答える