と、私はこれを得たstackoverflowの質問から助けを借りて(RSA秘密鍵で署名)C#の確認データ:はBouncyCastleを使用して、公開鍵
using System.Net.Sockets;
using System.Security.Cryptography;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
は...今
TcpClient client = new TcpClient("127.0.0.1", 1337);
NetworkStream stream = client.GetStream();
StreamWriter writer= new StreamWriter(stream);
StreamReader reader = new StreamReader(stream);
writer.WriteLine("hello");
writer.AutoFlush = true;
string response = Convert.FromBase64String(reader.ReadToEnd()).ToString();
RSACryptoServiceProvider RCP;
var x = new PemReader(File.OpenText(pubkey));
var y = (RsaKeyParameters)x.ReadObject();
RCP = (RSACryptoServiceProvider)RSACryptoServiceProvider.Create();
var pa = new RSAParameters();
pa.Modulus = y.Modulus.ToByteArray();
pa.Exponent = y.Exponent.ToByteArray();
RCP.ImportParameters(pa);
byte[] test = RCP.Decrypt(response, true);
、明らかに復号化私は署名された(暗号化されていない)何かを解読しようとしているので、同じ "鍵"ではないので、失敗します。私はVerifyData()のようなメソッドを使うべきだと思って混乱していますが、これはブールを返し、私にはわかりません。
私が達成したいのは、C#に相当するopenssl rsautl -verify -inkey public.pem -pubin
です。すなわち、前記メッセージの内容を検証するために前記パブキーを「解読」する。
私はここで正しい軌道に乗っていますか?
- あるMik
私の目的のために、私は検証を行い、解読する必要はありませんでしたが、私は他の目的のために使っていました。 Bouncycastleよりも簡単な解決策は、少なくとも私にとってはこれでした: 'OpenSSL.Core.BIO bin = new OpenSSL.Core.BIO(public_key_as_string); OpenSSL.Crypto.RSA rsa = OpenSSL.Crypto.RSA.FromPublicKey(bin、null、null); バイト[]メッセージ=新しいバイト[1024]; (OpenSSL.NET)(http://openssl-net.sourceforge.net/)ラッパーを使用して、メッセージを送信します。 – Mik