問題タブ [cryptlib]
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.
java - Java を使用して cryptlib でエンコードされたテキストをデコードする (cryptlib なし)
こんにちは。
まず第一に、私はstackOverflowと私が話している主題に不慣れです... JavaアプリケーションでTripleDES暗号化にcryptlib
ライブラリを
使用しないようにしようとしています(現在、AESを使用しています-確実にするために下位互換性 JNI を使用せずに cryptlib ライブラリで作成された文字列をデコードできるようにしたい)。
しかし、私が今試したことはどれもうまくいきませんでした。
構成:
アルゴリズム: TripleDES
モード: CBC
フォーマット: CRYPT_FORMAT_CRYPTLIB
キーのサイズは 16 バイトです (これは不便ですが、BouncyCastle でサポートされます)。
また、暗号化されたデータのサイズは 8 の倍数 (たとえば 81 バイト)ではありません。
ライブラリのラッパー (C でも) では、コンテキストは次のように作成されます。
エンベロープは次のように作成されます。
問題はフォーマットだと思います(「cryptlibネイティブ」フォーマットであるため)-ネットでそれに関する説明が見つかりません...
現在、私の最善の試みはこれでした:
さまざまなパディングも試しましたが、常に次の 2 つの例外のいずれかで終了します。
- javax.crypto.IllegalBlockSizeException: データがブロックサイズで整列されていません
- javax.crypto.IllegalBlockSizeException: 復号化で最後のブロックが不完全です
私は少し絶望的になっているので、ここで誰かが私を助けてくれると本当に嬉しいです...
編集: 暗号化のコード (CryptData.cpp) は次のとおりです。
EDIT 2:比較すると、このメーリングリストで
説明されているのと同じ実装です。
しかし、Javaでデコードしたい...
編集 3: 問題は、暗号化されたデータが cryptlib に含まれていることだと思います (コードに見られるように)。
編集 4:
問題がエンベロープであることはわかっています。cryptlib は、作成された暗号化コンテキストのセッション キーを使用して、復号化されたデータを CRYPT_FORMAT_CRYPTLIB 形式でエンベロープします。問題は、実際の復号化を実行する前にエンベロープを復号化する方法です。
デコードを実行する方法について何か提案はありますか?
qt - Cryptlib ライブラリを Qt 作成者とリンクする
私はQt 5.0に基づいたQt Creator 2.6.1を持っています私はビジュアルスタジオ2010でcryptlibを構築しました
すべての cryptlib プロジェクトは C:\SDK\cl342 にあります。プロジェクトをビルドすると、crypt.h と cl32.lib と cl32.dll はこのフォルダー C:\SDK\cl342 にあります。
cryptInit などの cryptlib から呼び出すすべてのメソッドでリンカー エラーが発生します。プロジェクト メニューから追加しようとしましたが、外部ライブラリを追加すると、pro ファイルに多くの変更が加えられますが、crypt.h を含めることさえできません。
mainwindow.obj:-1: エラー: LNK2019: 未解決の外部シンボル _cryptEnd@0 が関数で参照されています "public: __thiscall MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QAE@PAVQWidget@@@Z) –< /p>
私のプロファイルは次のようになります。
string - マーシャルなしのシステム文字列から標準文字列へ
使用が許可されていない場合に変換する方法はありSystem::String
ますか?std::string
msclr/marshal_cppstd.h
その理由はcryptlib.h
、同じプロジェクトで使用する必要があり、両方を含めるとエラーが発生するためです。
型名が競合するため、cryptlib.h と wincrypt.h の両方を同時に使用することはできません
pfx - .p12 への Cryptlib エラー書き込み「追加されている証明書に対応するキーが存在しません」
以前は、CryptLib を使用する (Windows) パッケージを使用して RSA 暗号化を処理していました。ここで、クライアントを CryptLib の使用が優先されない新しいプラットフォームに移行したいと考えています。すべてを作成したので、あとは秘密鍵をインポートするだけです。
キーは CryptLib のキーセット ストア (pkcs#15) に格納されます。グーグルで調べてみると、ほとんどの (10 年前の) メールは、「あなたはそれを望まない」、「作者は故意にそれを防いでいる」などと述べています。誰も使わないからサポートを作りたくない。
唯一の方法があるようです: 秘密鍵を pfx / pkcs#12 形式で保存します。その形式ははるかによくサポートされています。
pkcs#12 を使用するには、フラグを有効にして cryptlib dll を再コンパイルする必要があります。私はそれを行い、pkcs#12 ルーチンを呼び出すことができました。
dll に Delphi ラッパーを使用して読みやすくします。 // ディスク ks からキーセット (p15) をロードします。
最初のテストは、p15 ストアを作成することであり、うまく機能します (作成されたストアは、もちろんパスワードが変更されていることを除いて、元のストアとほとんど同じです)。しかし、p12 ストアへの 2 回目の書き込みでエラーが発生します。ソースをたどると、提供した秘密鍵が証明書と見なされることに関係しています。また、秘密鍵がまだ存在しないため、次のエラーで失敗します。
誰かが cryptlib の pcs#12 機能を使用したことがあるか、この状況を処理する別の方法を知っていることを願っています。ソリューションが python、php、c#、delphi にある場合は問題ありません...
2014 年 4 月 22 日更新 cryptlib self の C# ラッパーを使用し、コードを書き直しました (Delphi ラッパーが問題を引き起こした場合に備えて) が、同じ結果が得られました :(
更新 #2
テストを確認すると、テストで .p12 IS が生成されます。真新しい .p12 ファイルにも多少の手間がかかります。ただし、元のキーは .p12 から読み取られるため、ファイルを書き戻すために必要な情報が含まれている可能性があります...さらに確認してみましょう...
更新 #3 cryptlib の unittests を変更して、.p15 キーストアからテスト秘密鍵を取得し、それを p12 キーストアに書き込みましたが、秘密鍵を設定するときに、空の pkcs12_info 構造がアイテム設定関数に渡されるようです。
Pfff、誰かが何か指針を持っていることを願っています...
c++ - #define でのコンパイル エラー
Cryptlib からコードをコンパイルしようとしています。しかし、このファイルの 96 行目でエラーが発生します。
また、mingw の gthr.h でいくつかのエラーが発生しました。
Windowsでmingw 4.8.1を使用してコンパイルしています。
debug.h の 96 行目でエラーが発生しました
編集 1:
93 行目で static_assert を定義するためにファイルを変更しました。しかし、mingw から typetrait ファイルに新しいエラーが発生しました。
エラーは次のとおりです。
openssl - Cryptlib の aes_mode_reset() に相当する OpenSSL は何ですか?
競合のため、CryptLib を OpenSSL に移行する必要があります。
以下の形式で示すように、必要な違いのいくつかを見つけました (と思います)。cryptlib_function => openssl_function
よくわからないのは次のとおりです。
cryptlib のメモには、次のように記載されています。
aes_ctr を探していると、aAES_ctr128_encrypt
と aes_ctr_cipher が隠されているのがわかりますが、それらが一致するかどうかはわかりません。128 では、おそらく openssl は aes128 に限定されており、必要な aes256 をサポートしていないのではないかと考えています。つまり、openssl の部分を cryptlib に移行することになると思います。
いずれにせよ、モードをリセットする方法は何でしょうか (再度呼び出す前に IV をクリアするだけですか?)。ありがとう!!
export - cryptlib p15 ファイルから秘密鍵をエクスポートする
CRYPTLIB によって作成/管理された .p15 キーセットから RSA 秘密鍵を抽出する必要があります。キーセット (CryptOpenKeyset) を開き、それを CRYPT_CONTEXT (cryptGetPrivateKey) にロードすることはできますが、次はどうすればよいでしょうか? 理想的には、OPENSSL で使用するために PEM 形式で必要です。これはどのように行うことができますか?