問題タブ [wincrypt]

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 に答える
556 参照

c++ - exe の md5 で期待されるダイジェストが得られない

私はここで新しいです、私はこれを正しくやっているといいのですが。

このリンクのマイクロソフトの実装に従って、ファイルの MD5 ハッシュ ダイジェストを計算する C++ アプリケーションを作成しました その場合、md5 ハッシュ ダイジェストは、md5 ダイジェストを計算する準備ができているツールと比較すると、どのタイプのファイルに対しても正しいです。ただし、手元にあるファイルが cmd.exe などの実行可能ファイルの場合は除きます。ハッシュ ダイジェストは異なり、exe の場所によって異なります。cmd.exe を別の場所に移動すると、ダイジェストは再び異なります。そのため、同じ問題に直面するためにopensslライブラリを使用して同じ機能を実装し続けました。Microsoft 実装と openssl のハッシュ ダイジェストが同じであることに気付きました。そのため、ダイジェストを計算するためにファイルを渡す前に、ファイルの読み取りに何かが欠けていると思います。しかし、私は何も見つけるためにたくさん検索しました。win API の「createfile」と「fopen」を使用してファイルを読み込もうとしましたが、同じ結果が得られました。

ここにソースコードがあります

このコードはハッシュ「59a1d4facd7b333f76c4142cd42d3aba」を計算し、「デジタル火山ハッシュ ツール」と「md5 および sha チェックサム ユーティリティ v2.1」はハッシュ「fc0b4a626881d7c5980d757214db2d25」を計算します。

0 投票する
0 に答える
659 参照

c++ - タイプ「unsigned long *」の引数は、タイプ「HCRYPTHASH *」のパラメーターと互換性がありません

64 ビット マシンの Windows 8.1 で Visual Studios 2012 を使用しています。次のコードを C++ 用にコンパイルする際に問題が発生し、上記のエラーが発生します。

ただし、これはこれが呼び出される方法のようです(ここでは、同じ呼び出しがあり、同じエラーが発生するものがあります)。VSはいくつかの可能な修正を提案していますが、それを試してみますが、この動作が発生する理由と回避方法を知っている人はいますか?

推奨される修正は次のとおりです。

エラー C2664: 'CryptCreateHash': パラメーター 5 を 'unsigned long *' から 'HCRYPTHASH *' に変換できません 指す型は無関係です。

変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です

ありがとう、

アオダーン

編集: 32 ビット コンパイルでは発生しないため、私が読んだ例はそのように行われたと思います。提案された修正が 64 ビット コンパイルで機能するかどうかを更新します。

0 投票する
0 に答える
437 参照

php - phpseclib を使用した AES でテキストを暗号化、C++ Windows Crypto API を使用してテキストを復号化

こんにちは、phpseclib を使用して AES で暗号化された AES テキストを復号化しようとしているときに、非常に奇妙な問題が発生しています。

サーバーへのメッセージを暗号化するために使用する AES キーを RSA 暗号化します。サーバーは RSA で暗号化された AES キーを解読し、それを使用して着信メッセージを解読します。

また、返信を暗号化します。

AES キーを PLAINTEXTKEYBLOB としてエクスポートして、キーが同じであることを確認します。

元のメッセージを暗号化するために生成された hKey HANDLE を使用して、WCAPI を使用してサーバーから AES 暗号化テキストを復号化しようとすると、問題が発生します。

CryptDecrypt() は私にジャンクを残すだけです。復号化は元のメッセージを生成しません。

また、ランダムなバッファではなく、暗号化されたメッセージを実際に解読していることも確認しました。

また、このメッセージを解読する前に、サーバーが次の AES キーを暗号化できるように、公開キーを含む暗号化されたメッセージを送信します。これは成功です。

C++ から PHP への暗号化/復号化はできますが、その逆はできません。

ここにPHPがあります。

ここにC++があります

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

c++ - ファイルが完全に復号化されていない、AES CBC モード。最初のブロックは解読されませんでした。WCAPI

わかりましたので、暗号化しているファイルが 5 つあります。IVを設定していません。

最初のファイルの復号化は問題ありません。

残りのファイルの最初のブロックは復号化されません。

したがって、ファイルは 99% 復号化されます。


IV を静的な値とランダムな値に設定しようとしましたが、同じ結果になりました。

最初に暗号化するファイルは、100% 復号化するために復号化する最初のファイルである必要はありません。

それが復号化と関係があると私に信じさせるのはどれですか?


そのため、暗号化のために aes キーをインポートしてキー ハンドルを作成します。

次に、ファイルを暗号化し、同じキーハンドルを使用して別のファイルに移動します...

すべてのファイルに新しいキーハンドルが必要ですか..?

キーハンドルをクリアする機能はありますか?


WCAPI が最後のファイルの最後のブロックを次のファイルの IV として使用していることを何かが教えてくれますか?

何か誤解しているかもしれませんが、ご容赦ください。

以下は、decrypt_file 関数です。

0 投票する
0 に答える
502 参照

c - CryptEncrypt が ERROR_MORE_DATA を返す

wincrypt API を使用して AES 暗号化/復号化を実装しようとしています。このコードを書きましたが、うまくいきません。と をCryptEncrypt返します。FALSEGetLastError() == ERROR_MORE_DATA

で指定した値が何であれpdwDataLen、常に返され、FALSE値が で増加しpdwDataLenます0x10

私は何を間違っていますか?

0 投票する
0 に答える
255 参照

c# - C++ と C# の両方で同じ暗号化アプローチを使用する

コンテキスト:セキュリティを追加するためにライセンス プロセスが必要なアプリケーションを開発しています。アプリケーションは主要な C# ですが、C++ で記述された小さな部分 (実際には独立したモジュール) があります。

後者には、ライセンス プロセスが既に実装されています。要約すると、アプリが初期化されると、顧客情報に基づいて開発者によって生成された、暗号化された情報を含むライセンス ファイルが検索されます (a string)。ファイルが有効な場合、アプリは実行を続行します。それ以外の場合はシャットダウンします。その重要な部分は、wincrypt.hライブラリを使用して暗号化を文字列に追加することです。

DESIRE:両方のパーツ (またはモジュール) がライセンス ベースのセキュリティを備えている必要があり、同じライセンス ファイルを共有する必要があります。

問題:アプリの他の部分で使用するために、前述のセキュリティ プロセスを C# に適応させようとしています。関数を使用してそうする方法が見つかりませんでしwincrypt.hた (おそらく、私の C# の知識がそれほど高くないためか、単にそれができないためです)。最終的には RSA を使用することになりましたが、2 つの異なる暗号方式に行き着きました。

質問:wincrypt.h C#で使用する方法はありますか? stringそうでない場合、C++ と C# の両方で使用できるプロセスの (en|de)cription を開発する他の方法はありますか?

どんな助けでも大歓迎です。