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