2

まず、これはタイプミスではなく、公開鍵を使用して復号化したいと考えています。これを行う目的は、第三者が実際に公開鍵に対応する秘密鍵を持っていることを確認するよう要求することです。基本的に、私はいくつかのランダム データを送信し、彼らはそれを秘密鍵で暗号化し、公開鍵を使用して復号化し、復号化された値を送信したランダム データと比較します。これは公開鍵暗号ではかなり標準的な手順だと思いますが、何らかの理由で公開鍵で復号化することはタブーのようです.

私は単にRSACryptoServiceProvider.NET 2.0で使用しています。ただし、呼び出すとwith messageDecryptがスローされます。キーは悪くありません (問題なくできます) が、公開キーだけでは復号化できないようです。何を与える?これは可能でなければなりません。CryptographicExceptionBad KeyEncrypt

4

3 に答える 3

7

認識されている用語は署名だと思います。彼らは秘密鍵で署名し、あなたは公開鍵で検証します。低レベルの数学を十分に理解していないことは認めますが、私の理解では、署名は実際には秘密鍵で暗号化するだけです。

RSACryptoServiceProviderの符号を使用し、メソッドのファミリを検証します。実際、SignHash実際には「秘密鍵で暗号化する」と言っています。

于 2010-06-25T22:05:29.733 に答える
0

Raj によると、提供されたキーはおそらく交換用にマークされていません。

公開鍵を提供した当事者に、どのように生成したかを尋ねてください。makecert.exe を使用する場合は、"-sky Exchange" を指定する必要があります。これがないと、ここで実装しているユースケースである暗号化/復号化ではなく、署名と認証にのみキーを使用できます。

于 2012-06-05T22:34:38.423 に答える
0

これらの .Net クラスは、crypto API のラッパーである必要があります。

crypto API には 2 種類のキーがあります。Crypto APIは PKCS#11 のラッパーです。Microsoft 暗号化サービス プロバイダーを使用してキー ペアを生成すると、AT_EXCHANGE キーと AT_SIGNATURE キーが取得されます。すべてのキーは、 PKCS#11標準で定義されているいくつかの属性に基づいて生成されます。

AT_EXCHANGE キーの属性:

ラップ/アンラップ = true

署名/検証 = true

暗号化/復号化 = false

AT_SIGNATURE キーの属性:

ラップ/アンラップ = false

署名/検証 = true

暗号化/復号化 = false

したがって、基本的に、データを交換するときは、基本的にラップ/ラップ解除機能を実行しています。これは、Microsoft が AT_EXCHANGE と呼んでいるものです。これは主に秘密鍵/対称鍵の交換に使用され、大量のデータの交換には使用されません。

したがって、戻って、データに署名/ラップするために選択したキーを見つける必要があります。

于 2010-06-30T16:02:29.493 に答える