問題タブ [evp-cipher]
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.
encryption - OpenSSL EVP 対称 EVP_aes_256_cbc と同等になる
EVP_aes_256_cbc
暗号化されたレガシーデータとRSA 公開鍵を復号化する Go スクリプトを作成しています。
C では、これは次のようになります。
Go にはevp_key
とのiv
バイト配列に相当するものがありますが、OpenSSL で EVP がどのように機能するかはわかりません (私は C の能力がかなりありますが、この復号化が行われるプロセスを把握することはできません)。 OpenSSL ソースを参照してください。)
Go では、ここまで到達できます。
そして、ここで私は迷子になります。と がありevpKey
ますpKey
が、ここからデータを復号化する方法がわかりません。OpenSSL はRSA_decrypt_old
そのようなものを使用していますが、それが実際に何を意味するのかを追跡することはできません。
Go に相当するものはありますか? それとも、あまりにも高価なcgo
パッケージを破棄して袖をまくる必要がありますか?
更新 (解決):
Go で EVP の動作を再現しようとしている人、または EVP が正確にどのように機能するのか疑問に思っている人のために、以下に内訳を示します。C(またはJavaまたはその他のOpenSSL実装)が次のような暗号化を行っていることがわかっている場合:
「シール」は、実際には RSA 公開鍵で鍵を暗号化するだけです。
Go でそのようなものを復号化するには:
encryption - 16 の倍数ではないサイズの aad に openssl で EVP_aes_128_gcm を使用する
GMAC のインターフェイスとして openssl EVP (EVP_aes_128_gcm) を使用しようとしています。NIST の CAVP GCM テスト ベクトル ( http://csrc.nist.gov/groups/STM/cavp/documents/mac/gcmtestvectors.zip ) に対してコードをテストしています。問題は、aad サイズが 16 の倍数の場合、コードが正しい GMAC タグを与えることができることです。しかし、サイズが 16 の倍数でない場合、結果は間違っています。何が問題なのですか?
コードは次のとおりです。
テスト ベクトル (コードのコメント セクション) の場合:
出力がおかしい…
テスト ベクトルの場合:
出力は正しいです:
私が使用しているバージョンは次のとおりです。 OpenSSL 1.0.1 2012 年 3 月 14 日
c - openssl evp aes_256_ctr() モードでの暗号化中に生成された無効な文字
私の考えは、クライアントサーバーモデルでファイル暗号化を行うことであり、暗号化の目的でopenssl evpを使用しています。暗号文をテキスト ファイルに保存し、クライアントに送信する必要があります。しかし、ファイルに保存できない暗号文に無効な文字が存在するため、これを行うことができません。
これは暗号化のための私のコードです:
このリンクを参照して、復号化を伴う無効な文字の問題が報告され、解決されました。
openssl evp api (aes256cbc) を使用したファイルの暗号化に関する問題
誰かがここで私を助けてくれることを願っています。
前もって感謝します。
encryption - AES_* 関数と EVP_* 関数を使用した暗号化
AES_*
openssl ( ) 関数を使用して暗号化されたデータがあります。このコードを更新して、新しい ( EVP_*
) 関数を使用するようにします。ただし、古いコードを使用して暗号化されたデータを復号化できるはずです。
古いコードと新しいコードの両方を下に貼り付けました。暗号化/復号化されたコンテンツが異なります。つまり、それらを同じ意味で使用することはできません。これは、古いコードを使用して復号化してから再暗号化することなく、コードをアップグレードできないことを意味します。
どちらの場合も派生が同じにEVP_BytesToKey
なるように、パラメーターの値はありますか。または、( ) 関数aes_key
を使用して同じことを達成する他の方法はありますか? EVP_*
に対していくつかの異なる値を試しdigest
、rounds
を作成しようとしましiv NULL
たが、実際には機能しませんでした。つまり、古い方法と同じ出力が得られません。
AES_*
関数を使用したコード
EVP_*
関数を使用したコード。(暗号化コードは以下にあり、復号化コードも同様です)。
ありがとう
gcc - Debian での EVP_idea_ecb への未定義の参照
次のコードがあります。
これは大したことではありませんが、問題なくコンパイルできるはずですが、
libssl-dev
がインストールされています。ここで何がうまくいかないのですか?
私のディストリビューション: x64 の Debian Jessie。
c - OpenSSL の ENGINE とは何ですか? また、何に使用されますか?
ENGINE
OpenSSL の が何であるかについての適切な説明が見つかりません。などの関数で使用されますEVP_PKEY_CTX_new
。
andEVP_PKEY_CTX_new
を使用して何かを暗号化/復号化する直前に使用していますが、呼び出すときにパラメーターを本当に指定する必要がありますか? OpenSSL の内部を見ると、どこでもパラメーターが null として指定されています。EVP_PKEY_encrypt
EVP_PKEY_decrypt
ENGINE
EVP_PKEY_CTX_new
だから私の質問は次のとおりです: ENGINE
OpenSSLのは何ですか?それは何のために使用されますか?