1

私は暗号の専門家ではありませんが、私が理解しているように、3DES は対称暗号化アルゴリズムであり、公開鍵/秘密鍵を使用しません。

それにもかかわらず、私は公開鍵 (具体的には .CER ファイル) を使用してデータを暗号化する任務を負っています。対称/非対称タング全体を無視すると、公開鍵からの鍵データを TripleDES 鍵として使用できるはずです。ただし、.CER ファイルからキー バイトを抽出するのに苦労しています。これはそのままのコードです..

TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
X509Certificate2 cert = new X509Certificate2(@"c:\temp\whatever.cer");
cryptoProvider.Key = cert.PublicKey.Key.

証明書から未加工のキー バイトを抽出する最も簡単な方法は、ToXmlString(bool) であり、返された文字列に対してハッキーな部分文字列化を行います。しかし、これは非常にハックなようで、もっと簡単で明白な方法が欠けているに違いないと感じています。

.cer ファイルを使用してキー データを C# 3DES 暗号化クラスに提供する簡単な方法を見逃しているのでしょうか、それとも証明書の xml 文字列からハッキングするのが本当に最善の方法なのでしょうか?

4

5 に答える 5

4

非対称暗号化用に生成された鍵を対称暗号化に使用することはお勧めできません。公開鍵を 3DES の暗号化鍵として使用する方法を考え出すことを妨げるものは何もありませんが、最終的には、公開鍵にアクセスできる人なら誰でも (つまり、誰もが!) 暗号文を解読できるようになります。 .

于 2008-09-23T14:58:14.367 に答える
2

cryptoProvider.Key = cert.GetPublicKey()?

于 2008-09-23T14:53:15.250 に答える
1

ここでの本当の問題は、公開鍵が公開鍵であるということです。自由に利用できることを意味し、暗号化のセキュリティをゼロにします。

このスレッドの誰もが、すべてを復号化するために必要なすべての情報を持っています。グーグルもそうです。

そのような公開鍵データを使用しないようにユーザーに勧めてください。少なくとも、一貫性のあるキーを生成するために使用できるパスワードまたはその他の少し安全なチャンクを提供してもらいます。

もう一つ。証明書キーのサイズはさまざまです。キー内の余分なバイトの破棄を処理できる可能性がありますが、キーが3DESキーの必要量よりも短い場合は、配列インデックス/範囲外の例外が発生する可能性があります。3DESに必要なのは56ビットだけで、証明書キーはほとんどの場合256ビット以上です。

于 2008-09-23T15:12:42.473 に答える
1

非対称暗号化を使用して大量のデータを暗号化することは、適切な方法ではありません。代わりに、対称アルゴリズムでデータを暗号化し、公開鍵で対称キー (および IV) を暗号化します。

MSDN のこのページは、.Net 対称暗号化を使い始めるのに本当に役立ちました。

于 2008-09-23T14:53:34.190 に答える
0

あなたが欠けているのは、キーバイトを含む文字列からバイトを変換していると思います。

FromBase64Stringメソッドが役立つことを願っています。

byte[] keyBytes = Convert.FromBase64String(sourceString);
于 2008-09-23T14:53:16.280 に答える