web-dev-qa-db-ja.com

この.NET暗号化コードをopensslコマンドに変換する方法は?

opensslコマンドラインツールを使用して署名者の秘密キーでメッセージに署名し、以下のコードと同じ結果を取得する方法

using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;

static public byte[] SignMe(X509Certificate2 rsa_cert, Byte[] message)
{
    ContentInfo ci = new ContentInfo(message);
    SignedCms scms = new SignedCms(ci, true);
    CmsSigner signer = new CmsSigner(rsa_cert);
    scms.ComputeSignature(signer, false);
    return Convert.ToBase64String(scms.Encode());
}
1
User

次のコードでも同じ効果が得られます。ここで、rsa_cert_private.keyはキーペアの秘密鍵であり、sign.txtは署名するメッセージです。結果は、元のメッセージのsha256ダイジェストに基づく署名である新しいファイルsign.txt.sha256になります。

openssl dgst -sha256 -sign rsa_cert_private.key "-out sign.txt.sha256 sign.txt

しかし、この時点で署名はバイナリ形式であり、base64にそれを取得するには、次のようにします。

base64 sign.txt.sha256> sign.txt.sha256.txt

これは、2番目の新しいファイル(sign.txt.sha256.txt)を作成します。これは、まったく同じ署名コンテンツですが、b64です。

署名を確認するには、まずそれをバイナリsigに戻す必要があります

base64 -d sign.txt.sha256.txt> sign.txt.sha256

しかし、base64に格納するために追加の手順と(確かに非常に小さい)追加のスペースをとるのではなく、常にバイナリのままにしておく方が簡単です。

1
Ruscal