問題タブ [cryptoapi]
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.
c# - Crypto API <-> .NET RSA 相互運用性
Crypto API を使用して RC4 暗号化キーを生成するアンマネージド アプリケーションがあります。このアンマネージド アプリケーションは、この RC4 キーを使用して一部のデータを暗号化します。この RC4 キーを使用して情報を復号化するクライアント側の管理されていないアプリケーションもあります。
ただし、このクライアント アプリでは、セッション キーを送信しています -> クライアント側で生成された RSA 公開キー (SIMPLEBLOB) を使用して暗号化された RC4 キー。暗号化されたセッション キーの生成は、以前はアンマネージ コードを使用して行われていましたが、部分信頼の下で Web アプリケーションからこのコードを実行する必要があるため、現在は C# に変換する必要があります。
キーは次を使用して生成されます
を使用してファイルシステムにエクスポートされます
(この記事http://www.codeproject.com/KB/security/plaintextsessionkey.aspxを使用して、プレーンテキストキーをエクスポートできたことに注意して ください)
クライアントの公開鍵は次を使用して作成されます
クライアントの公開鍵は次を使用してエクスポートされます
セッションキーは、サーバー側で作成されます
クライアントの公開鍵は次を使用してインポートされます
CryptImportKey(hProv、lpData、nSize、NULL、0、&hPublicKey
セッション キーは、クライアントの公開鍵を使用して RC4 を暗号化し、SIMPLEBLOB 形式を生成することによって生成されます。
CryptExportKey(hKey, hPublicKey, SIMPLEBLOB, 0, lpData, &nSize);
今、私の要件は、管理されたバージョンで上記の手順 (手順 1 と 2) を実行することです。これが私がやっていることです:
// コード プロジェクトの記事を使用して抽出されたプレーン テキストのキー データを読み取ります byte[] keyMaterial = File.ReadAllBytes(@"C:\keyMaterial.txt");
// クライアントの公開鍵をインポート
これにより、アンマネージド バージョンと同じサイズのデータが生成されますが、アンマネージド バージョンの手順 1 と 2 の場合のように正しい SIMPLEBLOB セッション キーが生成されません。このコードで何が間違っていますか?
cryptoapi - PFXExportCertStoreExの証明書に秘密鍵を関連付けます
証明書をpfxファイルにエクスポートしようとしています。これが私がすることです(簡略化):
PFXが作成され、秘密鍵はエクスポートされません。秘密鍵をpfxにエクスポートした人はいますか?秘密鍵を証明書に添付してエクスポートできるようにする適切な方法は何ですか?
cryptography - WinCrypt と CryptImportKey を使用してハードコードされた AES-256 キー
理想的には WinCrypt.h メソッドを使用して、Win32 アプリケーションにハードコードされた AES-256 キーをロードさせる必要があります。unsigned char[32] でキーを取得しましたが、CryptImportKey に渡すキー blob の正しい形式が見つかりません。すべてが無効なパラメーターエラーを発生させるようです。これを行う方法はありますか?
(WinCryptでIVを設定する方法も重要です。その方法がまったくわかりません)
c++ - クリプトアピは良いですか?
ハッシュ (sha1)、暗号化、c++ での win32 のデジタル署名などを行う暗号プログラムを作成しています。これは安全な cryptoapi に組み込まれています。または、crypto++ のような他のライブラリを使用する必要があります。最大限のセキュリティが必要で、すべてのシステムで動作します。 vista(およびオプションで2000)ですが、同時にexeサイズを最小限に抑える必要があるため、不要な外部ライブラリは必要ありません
c++ - PEMでエンコードされたX.509証明書をWindowsCryptoAPIにロードします
C ++で使用するには、PEMでエンコードされたX.509証明書をWindowsCryptoAPIコンテキストにロードする必要があります。-----BEGIN RSA XXX KEY-----
それらはとを持って いるものです-----END RSA XXX KEY-----
。Pythonと.NETの例を見つけましたが、それらは、プレーンなWindowsCryptoAPIに関連付けることができない特定の関数を使用しています。
HCRYPTKEYを取得したら、暗号化/復号化する方法を理解しました。しかし、Base64 BLOBを.PEMファイルにインポートして、そこHCRYPTKEY
から使用できるものを取得する方法がわかりません。
単に電話するだけではないという不思議な気持ちがありCryptDecodeObject()
ます。
私を軌道に乗せることができる指針はありますか?私はすでに「試行錯誤」プログラミングをしてどこにも行かなくなって2日を失いました。
cryptography - ダミーのためのcryptoapi
Windowsのcryptoapiパッケージについて学ぶのに役立つ本やオンラインリソースを教えてもらえますか?リチャード・ボンディの「CryptographyforVisualBasic」を見つけました。C++またはパッケージ全般を対象としたものにもっと興味があります。MDSNは圧倒的です!
security - MicrosoftCryptoAPIに関する基本的な質問
私はクリトアピを理解しようとしてMSDNを調べてきました。以下は、物事がどのように機能するかについてのいくつかの質問と推測です。私の推測に対する回答、確認、または反論は大歓迎です。
http://msdn.microsoft.com/en-us/library/ms867086.aspxで見つけたメモによると、CSPはセッション間で公開秘密鍵のペアを保持します。
キーコンテナに次のものを含めることができるように見えます。
これは正しいです?コンテナを閉じると、ペアになっていないキーは破棄されますか?
キーコンテナを作成/命名する通常の方法は何ですか?他のアプリケーションコンテナを踏みつけないようにするにはどうすればよいですか?公開/秘密キーを含むコンテナーが必要なので、cryptacquirecontextの備考セクションに記載されている一時コンテナーは適用できません。たぶん、いくつかの固定部分とシーケンス番号で構成されるcreatenameを使用します。完了したらコンテナを削除できます。
cryptsignhashは、署名または鍵交換秘密鍵のいずれかを使用してハッシュに署名することを指定します。これは、cryptsignkeyが適切なAlg_idパラメーター(値CALG_RSA_KEYXまたはCALG_RSA_SIGN)を使用してcryptkeygenによって作成された秘密鍵を見つけることを意味すると思います。
キーをエクスポートする場合、keyblobにはそれがどのような種類のキーであるかを示す情報が含まれていますか?
PUBLICKEYBLOBをエクスポートして、他の環境に転送した場合。署名の検証に使用する前に、そのBLOBを新しい環境にインポートする必要がありますか?cryptverifysignatureにはキーへのハンドルが必要なので、最初にインポートする必要があるように見えます。PUBLICKEYBLOBをインポートすると、既存の公開鍵と秘密鍵のペアの公開鍵が置き換えられますか?私はそうではないと思います。
c++ - AES と CryptoAPI による復号化? KEY/SALTが分かっている場合
さて、私は独自のバイナリ形式をパックしました。これは基本的に、いくつかの異なるラスター データセットの緩やかなパッキングです。とにかく、これを読んで開梱するだけの簡単な作業でした。しかし、次のバージョンでは、ラスター xml データは AES-256 を使用して暗号化されるようになりました (私の選択ではなく、選択の余地もありません)。
これで基本的に、アンパッケージャーを変更できるように、彼らが使用している SALT とともに AES キーが送信されました。
これらはキーではなく、単なる例であることに注意してください。
それぞれ 63 バイト長の ASCII 文字です。
基本的には、C++ CryptoAPI を使用してこれを解読したいと考えています (今週ここにいる唯一のプログラマーでもあります。これは明日ライブになります。私たちのせいではありません)。これを実装するための簡単なチュートリアルを探しました。残念ながら、ソルトとキーの両方を別々に持っているチュートリアルさえ見つけることができません。基本的に、私が今持っているのは、BYTEの配列を受け取る小さな関数だけです。その長さとともに。これどうやってするの?
私は午前中のほとんどを、cryptoAPI の表と裏を作成することに費やしました。しかし、うまくいかない期間:(
編集
だから私は彼らがそれを暗号化する方法を尋ねました。彼らは C# を使用し、RijndaelManaged を使用していますが、これは私の知る限り AES と同等ではありません。
EDIT2
ようやく何が起こっているのか正確にわかり、間違ったキーが送られてきました。
彼らは次のことを行っています。
パディング = PKCS7 CipherMode = CBC キーは、16 進数で 32 バイトのセットとして定義されます。IV も 16 進数で 32 バイトのセットとして定義されます。
私が彼らに尋ねると、彼らは塩を取り除いた。
wincrypt.h ヘッダー ファイルを使用して、CryptoAPI でこれらを設定するのはどれくらい難しいですか?