外部ライブラリを使用せずに、C# で OpenSSL PKCS#8 RSA を使用して作成された privateKey を読み取る方法を見つけようとしています。
誰かがこれを行う方法を知っていますか?
外部ライブラリを使用せずに、C# で OpenSSL PKCS#8 RSA を使用して作成された privateKey を読み取る方法を見つけようとしています。
誰かがこれを行う方法を知っていますか?
外部ライブラリでこれを行う最も簡単な方法は、(無料の) Chillkat Public / Private Key Componentを使用することです。これを使用すると、数行のコードを使用してキーをインポートできます。ライブラリの残りの部分についても、一般的な暗号の概念を扱うのがはるかに簡単になります。
また、通常の Microsoft .NET Framework とは異なり、Mono プロジェクトには、完全な C# ソースが利用可能なPKCS8 実装があるようです。これは、Mono コードに関連付けられた (LGPL 2.0) ライセンスが機能すると仮定して、外部ライブラリに絶対に依存できない場合の出発点として適している可能性があります...
最後に、PKCS #8 形式の解析はそれほど難しくありません。また、RSA/DSA キー ペア オブジェクトはPKCS #11に従っており、すべてのビットがどこにあるのかがわかれば、比較的簡単に .NET X509Certificate に変換できます。実際にVB.NETでこれを少し前に行いましたが、残念ながらそのコードを共有することはできません.
.Net Core 3 以降:
using System.Security.Cryptography;
// ...
// I had my PK in base64
var pkBase64 = "MIIEvQI...";
var rsa = RSA.Create();
rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(pkBase64), out _);
ご回答有難うございます。
RSA キーを作成するための私のスクリプトでは、OpenSSL を使用しました。
(Linux スクリプト)
openssl genrsa -out ${NAME}_openssl.key 2048
openssl pkcs8 -topk8 -in ${NAME}_openssl.key -nocrypt > ${NAME}.key
openssl req -new -x509 -key ${NAME}.key -out ${NAME}.crt -outform DER
C# では、XML 形式の privateKey が必要です。このパーサーを使用してこれを行いました。
チャレンジを解読するには、次を使用する必要があります。
byte[] challange = server.getChallenge();
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
rsaProvider.FromXmlString(Demo.Properties.Resources.XmlPrivateKey);
byte[] plaintext = rsaProvider.Decrypt(challange, false);
サーバー証明書を暗号化するには、次を使用する必要があります。
RSACryptoServiceProvider rsaProvider = x509.PublicKey.Key as RSACryptoServiceProvider;
byte[] answer = RsaProvider.Encrypt(plaintext, false);
JavaScience コンサルティングに感謝