C# で秘密鍵の暗号化を実行する方法はありますか?
の標準については知っていますRSACryptoServiceProvider
がSystem.Security.Cryptography
、これらのクラスは公開鍵の暗号化と秘密鍵の復号化のみを提供します。また、内部で秘密鍵暗号化を使用するデジタル署名機能を提供しますが、秘密鍵暗号化と公開鍵復号化を実行する公的にアクセス可能な機能はありません。
この種の暗号化を実行するための非常に良い出発点であるcodeproject でこの記事を見つけましたが、記事のコードは任意の長さのバイトをほとんど暗号化できないため、すぐに使用できるコードを探していましたランダムな値を含む配列(ゼロを含む任意の値を意味します)。
秘密鍵の暗号化を実行するための優れたコンポーネント (できれば無料) を知っていますか?
私は使用します.NET 3.5
。
注: これは一般的に、非対称暗号化 (秘密鍵を使用して暗号化し、公開鍵を使用して復号化する) を使用する悪い方法と見なされていますが、そのように使用する必要があるだけです。
追加説明
あなたが持っていると考えてください
var bytes = new byte[30] { /* ... */ };
2048bit RSA
そして、誰もこの配列で何も変更していないことを確認するために使用したいと考えています。
通常、デジタル署名 (つまりRIPEMD160
) を使用し、それを元のバイトに添付して受信者に送信します。
したがって、30 バイトの元のデータと、追加の 256 バイトのデジタル署名 ( であるため2048bit RSA
) があり、全体で286 バイトになります。ただし、その256 バイトのうち実際にハッシュされるのは160 ビットのみであるため、正確に1888 ビット( 236 バイト) が未使用です。
だから、私の考えはこれでした:
元のデータの30 バイトを取得し、それにハッシュ ( 20 バイト) を添付して、これらの50 バイトを暗号化します。「デジタル署名内の実際のデータをプッシュできた」ため、 286バイトよりもはるかに短い256バイトの長さのメッセージが表示されます。
ECDSA リソース
MSDN
Eggheadcafe.com
c-plusplus.de
MSDN ブログ
Wiki
DSA リソース
CodeProject
MSDN 1
MSDN 2
MSDN 3
最終的解決
私がこの問題をどのように解決したかに興味がある場合は、さまざまなバージョンの Windows (およびそれ以降) で広くサポートされている1024bit DSA
andを使用します。セキュリティは十分です (注文に署名していません。一部の子供が自分の iPhone で署名をクラックできないようにするため (:-D))、署名のサイズは40 バイトのみです。SHA1
Windows 2000