2011-01-28 23 views
8

私は暗号化ライブラリを使うことはありませんが、私は秘密鍵で文字列を暗号化し、公開鍵で解読したいと思います。どのようにC#でこれを達成する。小さなコードスニペットで私を助けてください。 ありがとう秘密鍵で文字列を暗号化し、公開鍵で復号化する方法は?

+1

RSAで任意の文字列を暗号化しないでください。ランダムに生成された**正しく埋め込まれた**対称鍵をRSAで暗号化する必要があります。 – CodesInChaos

+1

@ CodeInChaos:私はそれがRSAがほとんどの時間使用されていることに同意しますが、RSAの使用はこれに限定されません。 –

+0

AFAIK RSAは、アンパディングされていない任意の文字列を暗号化するためには安全ではありません。 – CodesInChaos

答えて

10

AFAIK公開鍵と秘密鍵の間には数学的な違いはありませんが、セキュリティ上の理由から一貫して使用する必要があります。

あなたは秘密鍵で暗号化し、公開鍵で復号化することを求めています。これは一般的に間違った方法です。この方向に進みたいのであれば、通常は「デジタル署名する」という操作です。

公開鍵公開鍵で元に戻すことができるように秘密鍵で署名した場合、実際には秘密ではありません。私はあなたが正当に送信者からメッセージを認証しようとしていると仮定します。あなたが必要とするのはデジタル署名です。これはまだ公開鍵 - 秘密鍵(または "非対称")鍵で実行されます。

デジタル署名では、メッセージ自体は秘密ではありません(公開鍵を持つ人は誰とも暗号化を解除できるので、必要ありません)。メッセージに基づいて、公開鍵を使用して検証可能な追加データが添付されます。一致する秘密鍵を持つ人によってのみ計算されています。

次のようになります。今すぐキーを取得する場所を把握するだけです。

static byte[] GenerateDigitalSignature(byte[] data, RSAParameters asymmetricKey) 
{ 
    using (var rcsp = new RSACryptoServiceProvider()) 
    using (var cp = new SHA1CryptoServiceProvider()) 
    { 
    rcsp.ImportParameters(asymmetricKey); 

    return rcsp.SignData(data, cp); 
    } 
} 
+0

これはデータに署名するだけです。それはそれを暗号化しません。 –

+0

うわー............ –

関連する問題