12

RSACryptoServiceProviderキーペアを取得するために .NET クラスを使用しました。

using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
  File.WriteAllText ("PublicKeyOnly.xml", rsa.ToXmlString (false));
  File.WriteAllText ("PublicPrivate.xml", rsa.ToXmlString (true));
}

これを openSSH で使用したいのですが、鍵の形式が似ていません。公開鍵と秘密鍵の両方を openSSH が使用できるファイルに変換する方法を知っている人はいますか?

ありがとう!

4

2 に答える 2

8

ソフトウェア ライセンス キー システム ( Ref )を実装できるように、RSACryptoServiceProvider との Openssl 相互運用性を実現する必要がありました。

後で PHP Web アプリケーションでライセンス管理に使用できるように、openssl を使用して Linux で秘密鍵と公開鍵を作成できるようにする必要がありました。ただし、VB.Net アプリケーションの RSA 署名ライセンス システムの基礎としても使用してください。

1週間の検索の後、最終的にこれが完全に可能であることを発見したので、それを共有しようと思いました.

Linux (またはその他の有用な OS) で開始し、openssl を使用して秘密鍵 (private.pem)、公開鍵 (public.pem)、証明書 (certificate.crt)、および個人情報交換ファイル (certificate.pfx) を作成します。 )。CN および emailAddress フィールドについて心配する必要はありません。証明書および pfx ファイルは、RSACryptoServiceProvider オブジェクトに公開キーまたは秘密キーを取得する手段としてのみ使用されます。

openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -pubout
openssl req -nodes -x509 -days 3650 -subj '/CN=www.example.com/emailAddress=info@example.com' -new -key private.pem -out certificate.crt
openssl pkcs12 -export -out certificate.pfx -inkey private.pem -in certificate.crt

次に、コードに秘密鍵を取得します。

Dim cert As New X509Certificate2("certificate.pfx", "", X509KeyStorageFlags.Exportable)
Dim rsaProvider As RSACryptoServiceProvider = DirectCast(cert.PrivateKey, RSACryptoServiceProvider)

秘密鍵または公開鍵が必要な場合は、これを試してください。

msgbox(rsaProvider.ToXmlString(True))  'Private key in XML format
msgbox(rsaProvider.ToXmlString(False)) 'Public key in XML format

公開鍵をコードに入れるには:

Dim cert As New X509Certificate2("certificate.crt")
Dim rsaProvider As RSACryptoServiceProvider = DirectCast(cert.PublicKey.Key, RSACryptoServiceProvider)

公開鍵が必要な場合は、これを試してください:

msgbox(rsaProvider.ToXmlString(False))  'Public key in XML format

もっと来る.....

于 2012-05-28T13:46:37.643 に答える
2

OpenSSL と RSACryptoServiceProviderの使用に関するこのブログ投稿では、可能であると述べていますが、著者は最終的にChilkat RSAライブラリを使用して、C# 内から OpenSSL と相互運用することになりました。PEM 形式は .NET の世界ではサポートされていないため、OpenSSLKey.cs と呼ばれるJavaScienceのこのライブラリを使用できます。ただし、ブログ投稿の著者が言及しているように、これにより問題が発生しました(引用):

OpenSSL: 1 つのブロック内に収まる小さなデータのみに署名できます。データはパディングされ、署名されます。逆は「検証」と呼ばれ、その場合、データは「符号なし」であり、パディングが解除され、元のデータが返されます。

[Windows]: 任意の量のデータに署名できます。Sign* メソッドは、最初にデータをハッシュし、次にハッシュをパディングして署名します。Verify* メソッドは、元のデータ、ハッシュ アルゴリズム名、署名データの 3 つの入力を想定しています。元のデータがハッシュされ、unsigning/unpadding の結果が元のデータのハッシュと比較されます。

したがって、Chilkat RSA ライブラリを使用することをお勧めします。

于 2011-07-06T20:53:56.900 に答える