問題タブ [crypto++]
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.
ant - ANTを使用したCrypto++リンカーエラー
前の従業員が私たちのために作成したカスタムソフトウェアのビルドプロセスをリバースエンジニアリングしようとしています。すべてを正常にコンパイルできるようになりましたが、リンクプロセスでエラーが発生し、crypto++の問題を示しています。手がかりはありますか?
OsはFedora11です
compilation - Crypto++をC++Builder2010に統合する方法/[ILINK32エラー]
私はC++Builder 2010を介して次の(例の)コードをコンパイルしようとしていました:
http://swarmapps.wordpress.com/2009/11/24/a-simplification-wrapper-for-the-crypto-library/
(http://pastebin.com/f6bd13d59 / example.cpp)
(http://pastebin.com/f2fc53f83 / BasicCryptoPPWrap.h)
コンパイラエラーはありませんでしたが、リンクに失敗しました。
[ILINK32エラー]エラー:未解決の外部'CryptoPP :: SimpleKeyingInterface :: SetKey(const unsigned char *、unsigned int、CryptoPP :: NameValuePairs&)'がE:\ TEST \ DEBUG\FILE1.OBJから参照されています
この問題を解決するにはどうすればよいですか?
php - 以前に Crypto++ で暗号化された OpenSSL の文字列を復号化する方法は?
編集:コメントで言ったように、キーが問題ではないことがわかりました。それらを問題なく使用して、OpenSSL でデータを暗号化および復号化できます。
しかし、Crypto++ を介して以前に暗号化された OpenSSL 上の文字列を復号化する必要があり、それは機能していません。
後で追加の詳細を投稿します。
こんにちは、Crypto++ で生成された RSA 公開鍵を使用して文字列を暗号化しましたが、PHP と OpenSSL を介して復号化しようとしています (まだ失敗しています)。
それが私がやっていることです:
- base64 または 16 進数でエンコードされていない秘密鍵は、「rsa-private.key」というファイルに保存されます。
- 暗号化されたメッセージは「message.txt」に保存されます (16 進数でエンコード)
ステップ 1: 次の方法で秘密鍵をロードします。$key = file_get_contents("rsa-private.key");
ステップ 2: 次の関数を使用してキーを PEM 形式に変換します。
(stackoverflow.com/questions/1357569/)
ステップ 3: OpenSSL でさらに使用するためのキーを準備します: (問題なし)
ステップ 4: メッセージを取得し、次の関数を使用してメッセージをデコードします。
ステップ 5: 文字列を復号化する: (機能しません)
$decrypteddata は常に空です。
なぜ機能しないのかわかりません。私が間違っていることに気づいた人はいますか?
php - Crypto++ AES 暗号化を PHP の mcrypt に移植する際のキー サイズの誤り
以前、C++ CryptoPP Rijndael_128 CBC コードを MCrypt PHP に移植することができましたが、現在、CFB モードで問題が発生しています。C++ と PHP の結果は一致しません (最初のバイトは一致しますが、これは偶然かもしれませんが、他のすべては一致しません)。いくつかの診断では、PHP の mcrypt がキーの長さを正しく設定していないように見えますか?
これがC++です(簡単にするために診断と雑用は削除されています):
そして、ここにPHPがあります:
g_encrypt_key
とg_encrypt_iv
はどちらも 16 バイトの長さで、バイトは C++ と PHP のバージョンで一致します。PHP バージョンの場合、バイトから構築されたバイナリ文字列です (はい、これらが同一であることを確認しました)。
$cipher
のブロック サイズ、キー サイズなどを確認するために、PHP バージョンへの呼び出しを追加しました。ブロック サイズと iv サイズは両方とも 16 です。サポートされている鍵のサイズは、16、24、および 32 と報告されており、すべて予想どおりです。
私が問題だと思うのは、キーサイズが 32 バイトと報告されていることです。mcrypt docs を見ると、キーサイズを設定する唯一の方法は、必要なサイズのキーを提供することです。しかし、私は 16 バイトの鍵を渡しています! では、なぜ 32 バイトのキーの存在を報告しているのでしょうか? CFB モードで 32 バイトのキーを使用する必要がある場合、CryptoPP はなぜそれを問題なく受け入れるのですか? 解決策は何ですか?提供された 16 バイトの鍵を PHP に強制的に使用させることはできますか? または、CryptoPP で MCrypt とは異なる設定にデフォルト設定されている、欠落しているパラメーターがありますか?
結果の暗号化データの長さを最小限に抑えたいので、CFB モードを使用しています。パディングによって導入される数バイトは、このアプリケーションでは重要です。
C ++で暗号化/復号化できる必要がありますが、PHPでのみ暗号化できます。AES は間違いなく、私のアプリケーションにとってやり過ぎです。データ内の個々のバイトの機能が明確にならないように、最低限必要なのは「バイトの適切なスクランブル」です。
c++ - 暗号的に安全なキーとIVECを決定論的に生成する
バックグラウンド
私は静的なWebコンテンツのユーザーのために動的な認証スキームの開発を可能にするシステムを設計しています。動機は、大量の複雑でありながら機密性の高いWebコンテンツを事前に生成し、Webサーバーによって強制されるCookieベースの(可逆的に暗号化された情報を埋め込む)認証を使用して静的に提供することです。AEADモードの暗号化プリミティブを使用します。
問題
一定期間、たとえば1週間(現在有効なペア)有効なIVECとキーを生成する必要があります。また、過去のIVEC /キーもたとえば2週間有効(履歴的に有効)であり、履歴的に有効なシークレットで暗号化されたデータは、現在有効なIVEC/KEYで再暗号化されます。
私が必要としているのは、乱数とパスフレーズのシードであり、64ビットまたは128ビットの数値ブロックをインデックス付きで生成できる決定論的CSPRNGです。架空のCSPRNGのインデックス要素の1つとして「1970年1月1日」から数週間を使用すると、時間の経過とともにキーを自動的に変更するシステムを構築できるはずです。
私が検討しているアプローチ
現在、cryptoppにはそのような機能が見当たらないか、用語を十分に理解しています。cryptoppは暗号化ライブラリの中で最も先進的であるため、別の暗号化ライブラリを見つける自信がありません。したがって、実装が見つからない場合は、自分で実装する必要があります。連結されたデータから静的な文字列構造を生成し、それをハッシュ(以下に表示)することでうまくいきますか?
RIPEMD160(RandomPreGeneratedFixedNonce:PassPhrase:UInt64SinceEpoch:128BitBlockIndexNumber);
注:ブロック番号は割り当てられ、通常の構造になります。たとえば、128ビットダイジェストの場合、ブロック0の最初の64ビットはivec用になり、要素1のすべては128ビットキー用になります。
これは適切なアプローチですか(つまり、暗号的に安全ですか)?
-編集:コメントを受け入れる投稿-
少し考えた後、私は最初にパスフレーズとナンス/ソルトと考えていたものを16バイト(クリプトグラフィックオールストロング)キーにマージし、PKCS#5で概説されている手法を使用して複数の時間ベースのキーを導出することにしました。パスフレーズは使用されていないため、塩は必要ありません。
c++ - パディング付きの AES pkcs7 C++ コード
aes-cbc256 とパディングを使用した文字列暗号化の例 (C++ で -> Linux-Ubuntu で作業中) が必要です: PKCS7 助けてください。
次のコードで、IV を 0 に設定し、キー値を文字列値に設定するにはどうすればよいですか? pkcs7 パディングも追加したいと思います。crypto++ lib を使用しています (Linux の場合)
c++ - 元の文字列が Python で pyCrypto で暗号化されている場合に、Crypto++ を使用して C++ で文字列データを復号化する方法
データ文字列を pyCrypto で簡単に暗号化しましたが、crypto++ で復号化する方法がわかりません。暗号++を使用したC++のサンプル復号化コードを手伝ってくれる人はいますか? ここに私のpythonコードがあります:
c++ - 生成された暗号化文字列は、PyCrypto と Crypto++ で同じサイズではありません
最近、Python スクリプトを使用して文字列を暗号化しました。ただし、Crypto++ を使用して C++ で復号化できませんでした。生成された暗号化文字列を比較したところ、同じではないことがわかりました。誰でも助けることができますか?
ここに私のPythonコードがあります:
ここに私のC++コードがあります:
c# - aes256 の結果は、C# (Windows) と C++ (Ubuntu) の実装で異なります
以下は、C (Windows および C++ (libcrypto++ を使用する Ubuntu)) での cbc および pkcs7 パディング (およびパスワード) 暗号化を使用した aes256 のコードです。暗号化の結果は同じではありません。なぜですか?
C#:
C++:
c++ - C++ での暗号化ストリームの使用
いくつかの暗号化操作 (主に整合性チェック ハッシュサム) を使用したいと思います。ただし、そのような形式の操作を行うドキュメントを見つけるのに問題があります。
PS。a) GPL-3 と互換性がある、b) GNU/Linux で動作する、という条件でライブラリが異なる場合があります。
PPS。私は crypto++ を主張しませんが、他の C++ ライブラリとの相互運用性のために IOStream のような動作をしたいと考えています。