2

私は C# プログラムで RSA 非対称キー暗号化アルゴリズムを使用しており (以下で説明しています)、Java プログラムを介してデータを暗号化する必要があります。Java プログラムで、C# プログラムの結果と同じ暗号化キーを生成したい。

公開鍵:

<RSAKeyValue>
<Modulus>zgfXY1oUe4nyndX4qtobP1BMxtJ1/rfKU5csdAcWrSVu6ZaEAX3rL3cWnaSLzX4E1BNjSP9pjge6TH7UoaWqOQ==</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>

C# 暗号化プログラム:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

 rsa.FromXmlString(PublicKey); // read public key XML defined above

byte[] buffer = rsa.Encrypt(Encoding.UTF8.GetBytes(strToEncrypt), false);

string encryptedStr = HttpUtility.UrlEncode(buffer);// byteConverterGetString;

Java 暗号化プログラム:

byte[] modulusBytes = Base64.decode("zgfXY1oUe4nyndX4qtobP1BMxtJ1/rfKU5csdAcWrSVu6ZaEAX3rL3cWnaSLzX4E1BNjSP9pjge6TH7UoaWqOQ==");
byte[] exponentBytes = Base64.decode("AQAB");

BigInteger modulus = new BigInteger(1, modulusBytes );               
BigInteger exponent = new BigInteger(1, exponentBytes);

RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);

KeyFactory fact = KeyFactory.getInstance("RSA");

PublicKey pubKey = fact.generatePublic(rsaPubKey);

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

cipher.init(Cipher.ENCRYPT_MODE, pubKey);

byte[] plainBytes = new String("Admin123").getBytes("UTF-8");

byte[] cipherData = cipher.doFinal( plainBytes );

String encryptedString = Base64.encodeBytes(cipherData);

System.out.println(URLEncoder.encode(encryptedString));

上記のJavaプログラムを試しましたが、次のような結果が得られます:

o%2Bgw7%2BXhYxA9ltDV5zERSF4DyXgMTc%2Fgx82wRtT1xfR3suY0XBJLadp7bXjmSX7CplDVdoQyH05Jpqgkd%2B1G4A%3D%3D

そしてC#プログラムは次のように生成します

%23E%03%c2%10)%40E%bf%7b%f9%11%87c0%12q%b9w%ba%2c%98%b4%b1%96%bc%ee%c5_%c9t%1e'%e71 %85%b68t%00%3a%b7%d9%fb%a1%18%ba%10%b4%c3c%e1'*%3b%f6D%e2%cc6%82%80%f2%a6

誰でも私のJavaプログラムを修正するのを手伝ってもらえますか..ありがとう

4

2 に答える 2

1

あなたは2つの異なるものをURLエンコードしているようです:

  • Java では、Base64 でエンコードされた文字列をエンコードしていますが、
  • C#では、バイト配列でそれをやっています

これら 2 つの異なるアプローチの結果は同じではありません。おそらくnew String( cipherData )、Java 部分でエンコードする必要がありますか、またはbyte[]エンコードする前に 2 つの配列を比較するだけですか?

乾杯、

于 2012-10-17T07:19:20.010 に答える