問題タブ [rsacryptoserviceprovider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1750 参照

c# - C# / CSP を使用した HSM でのエクスポート不可能なキーによる RSA 暗号化

このコードを使用して、C# で RSA (CSP の交換キー) で対称キーを暗号化しようとしています (RSA キー CSP50C8C7CD はエクスポートできず、HSM にあります):

CSP ログを見ると、C# が操作を続行するためにキーをエクスポートしようとしていることがわかります。以下の CSP ログは、rsa_dnet.Encryptの使用に関する部分のみを示しています。

Windows SO は、プライベート キーをエクスポートすることを意味する PRIVATEKEYBLOB を渡す CryptExportKey を呼び出しています。

HSM では、このログは、Windows SO が秘密キーを抽出しようとしていることを示しています (これは、キーがエクスポートできないため、ERRO を意味します)。

HSM でエクスポート可能なキー CSP50C8C7CE を使用すると、ログにすべて問題がないことが示されます。

このログは、多くの RSA キーのインポート/エクスポート操作を示していることに注意してください (参照: CSP50C8C7CE - エクスポート可能なキー)。

質問: ライブラリ System.Cryptography の Encrypt 関数では、キーを常にエクスポート可能にする必要がありますか? または、プログラムに間違いがありますか?おそらくパラメーターがありませんか?

0 投票する
1 に答える
2924 参照

c# - 暗号例外 無効なフラグが指定されました

これが私のコードです:

「無効なフラグが指定されました」という同じエラーが表示され続けます。引数なしのコンストラクターを使用すると、例外はスローされず、キーサイズは 1024 になります。

0 投票する
1 に答える
1491 参照

c# - RSACryptoServiceProvider で暗号化するときにハッシュ サイズを定義する方法は?

重複の可能性:
RSACryptoServiceProvider (.NET の RSA) は、SHA1 の代わりに (署名ではなく) 暗号化に SHA256 を使用できますか?

RSACryptoServiceProvider暗号化に使用する場合、デフォルトのハッシュ アルゴリズムは明らかにSHA-1. (メソッドSHA-512を使用して) データを暗号化するときのように、別のハッシュ アルゴリズムを定義するにはどうすればよいですか? Encryptハッシュ アルゴリズムに関連するプロパティは見つかりませんでした。

0 投票する
1 に答える
660 参照

c++ - 他のコンピューターに RSA キーをインポートする際の問題

ペア キー (公開キーと秘密キー) を使用して暗号化と復号化を行うための小さなツールを作成しています。公開鍵と秘密鍵をコンピューターにエクスポートし、問題なくファイルを暗号化および復号化できます。同じ公開鍵を使用して他のマシンでファイルを復号化しようとすると問題が発生します。

キーウェアがアプリケーションを作成した同じコンピューターで正しく暗号化および復号化しますが、別のコンピューターでファイルを復号化しようとすると、CryptDecrypt() がエラー 80090003 (GetLastError() によって取得されたエラー) で失敗しました。私は何を間違っていますか...?公開鍵を他のコンピュータにエクスポートするにはどうすればよいですか? ありがとう!

0 投票する
2 に答える
1775 参照

cryptography - p、q、d、および u しかない場合、RSACryptoServiceProvider を使用して復号化するにはどうすればよいですか?

Megaを試すための単純なクライアント アプリを作成していますが、RSA の使用方法に頭を悩ませています。たとえば、セッション ID の復号化を考えてみましょう。これは、ログインするために最初に行う必要があることの 1 つです。

API は、次の RSA データを提供します。

  • p (1024 ビット)
  • q (1024 ビット)
  • d (2044 ビット)
  • u (1024 ビット)

そもそも、「u」が何の略なのかわかりません。コードから計算されていることがわかりますmodinverse(p, q)-これは一般にqInverseと呼ばれるものですか?

これは、私が以前に使用したものよりも秘密鍵の RSA データがかなり少ないため、どうすればよいかよくわかりません。ただし、RSACryptoServiceProvider によって使用される RSA データの一部は、最適化のために事前に計算されたデータにすぎないことを理解しなければならないので、残りは必要ないのではないでしょうか?

このデータを使用して、サイトの JavaScript は次の関数でセッション ID を復号化します。

RSACryptoServiceProvider を使用して .NET でこれを実行したいのですが、4 つのデータを渡すと (u == qInverse と仮定)、インポート中にキーが拒否され、「Bad data」例外が発生します。

データに対してさらに何かを行う必要がありますか? この状況で RSACryptoServiceProvider を使用できますか?

私がテストしているパラメーターと暗号化されたデータの例は次のとおりです。

補遺 2 月 2 日

リンクされた StackOverflow の回答を掘り下げて、不足しているコンポーネントを生成する方法を決定したと思うポイントに到達しました。しかし、今では「Bad key」という例外が発生して困っています。

欠落しているコンポーネントを生成するために使用しているコードを書きます - おそらくどこかでエラーを見つけることができますか?

InverseQ と D も手動で計算しましたが、値は入力データの値と一致しています。以下は、q、p、および e のみに基づいて必要なデータを生成するための関数です。

私の入力データは次のとおりです。

そして、これが私が生成された構造をどのように利用するかです:

このImportParameters呼び出しは、「Bad key」という例外をスローします。私は何を間違っていますか?

Q と P を入れ替えるとどうなりますか?

どうやら、RSACryptoServiceProvider にデータを受け入れさせるようです! しかし、これは正確にはどういう意味ですか?

ExtendedEuclidGcd生成コードで使用しなければならなかった方法からアイデアを得ました。2 つのインスタンスに異なる出力を使用しなければならないことが非常に面倒だったので、この実験を行いました。

一つu != qInverseは、これは正しいですか?私は元の JavaScript 関数の数学を理解していないので、その意味がわかりません。元の u 値は、実際には QInverse ではなく、内部のショートカットであると推測できますか?

さらなるテスト (つまり、データの実際の復号化) が続きます。一度行われた新しい展開で質問を編集します。

このパラメーター セットでは復号化に失敗します

私が持っている暗号化されたテスト データは (base64 エンコード) です。

バイト順がわからないため、2 つの選択肢を示します。両方の文字列で同じデータです。

これらの両方の復号化は失敗し、最初のケースでは「不正なデータ」と「このコマンドを処理するのに十分なストレージがありません」という例外が表示されます。2 番目のケース (MSDN の主張は、キーが暗号化されたデータと一致しないことを意味している可能性があります)。PKCS パディングが使用されていることを RSACryptoServiceProvider に伝えていますが、OAEP も試しました (パディングのデコードに失敗したというエラーが発生しました)。

元の JavaScript は問題なくデータを復号化しますが、"p" と "q" は私のものと入れ替わっています。

現在、私の質問は次のとおりです。

  • P と Q の切り替えは有効な操作ですか?
  • 私の推論は有効ですか、それともどこかで間違いを犯しましたか?
  • テスト データを正常に復号化するには、次に何をすればよいですか?
0 投票する
0 に答える
515 参照

smartcard - スマートカード暗号化サービスプロバイダーの選択

スマートカードプログラミングを行っていますが、次のような状況を説明したいと思います。

  1. カードからの証明書がローカルストアにインポートされませんでした(これは指定されたものではなく、現在の問題の原因です)

  2. プロバイダーの名前は指定されていません

2番目の基準は、次のようにRSACryptoServiceProviderのインスタンスを作成して証明書を取得することに頼ることができないことを意味します。

したがって、HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Cryptography \ Defaults\ProviderまたはHKEY_LOCAL_MACHINE\Software \ Wow6432Node \ Microsoft \ Cryptography \ Defaults \ Providerのいずれかからレジストリからすべてのプロバイダーの名前を読み取り、それぞれからRSACryptoServiceProviderインスタンスを作成します。コンテナがそれ自体をハードウェアデバイスとして識別しているかどうかを確認します。カードリーダーから直接証明書にアクセスする簡単な方法があるようです。

P / InvokeとAPIの使用を見てきましたが、これに使用できるAPI呼び出しも特定できません。

0 投票する
1 に答える
778 参照

vb.net - .NET で RSA を使用してメッセージを復号化する - m**d mod p*q が機能しない

私は Mega 暗号化 API を試していますが、RSA 復号化の部分で行き詰まっています。

使用する JavaScript は次のとおりです。

私は .NET (BigInteger をサポートする 4.0) を使用しており、同じ動作を再現しようとしています。

私が持っているRSAデータは次のとおりです。

RSACryptoServiceProvider を試してみましたが、うまくいきませんでした。別の投稿で、別のユーザーが、基本的な RSA 復号化アルゴリズム (m**d mod p*q) を使用して、RSACryptoServiceProvider を回避したと報告しました。

私はそれを実装し(U部分は必要ありません、理解しています)、入力がJavascript入力とまったく同じであることを確認しましたが、それでもうまくいきませんでした。出力は、Javascript コードによって期待されるものと同じではありません。

これは実装された関数です:

テストコード:

このコードは次を返します。

ただし、JavaScript 関数は

何が間違っているのか、どうすれば解決できるのか分かりますか?

0 投票する
1 に答える
1331 参照

c# - 326 行目の RSACryptoServiceProvider.VerifyData 例外

RSACryptoServiceProvider.VerifyData の使用に問題があります

NullReferenceException: オブジェクト参照がオブジェクト System.Security.Cryptography.RSACryptoServiceProvider.VerifyData (System.Byte[] バッファー、System.Object halg、System.Byte[] 署名) のインスタンスに設定されていません (/Applications/buildAgent/work/ で) 3df08680c6f85295/mcs/class/corlib/System.Security.Cryptography/RSACryptoServiceProvider.cs:326)

RSACryptoServiceProvider.cs の行 326 で発生した例外を確認できます。すべてのパラメーターと rsa の作成を再確認しました。すべて問題ありません。何か案は ?

私のコード:

0 投票する
2 に答える
1226 参照

c# - EncryptedXml DecryptDocument メソッドが「Bad Data」例外をスローする

Encrypt/Decrypt Streams のコード ブロックを作成しました。コードはローカル マシンで動作しています。しかし、コードを Web に公開すると、復号化関数が「Bad Data」例外をスローします これが私の Encrypton および Decryption 関数です

「exml.DecryptDocument();」で例外がスローされます。ライン。

問題と解決策について何か考えはありますか?

編集:

MSDNのページに、以下のような発言があります

X.509 証明書で XML 暗号化を使用するには、Microsoft Enhanced Cryptographic Provider をインストールし、X.509 証明書で Enhanced Provider を使用する必要があります。Microsoft Enhanced Cryptographic Provider がインストールされていない場合、または X.509 証明書で Enhanced Provider が使用されていない場合、XML ドキュメントを復号化すると、「不明なエラー」を伴う CryptographicException がスローされます。

「Microsoft Enhanced Cryptographic Provider」と「X.509 証明書」について何か心当たりはありますか? そして、私の問題はこれに関連していますか?