OpenSSL CLIでは、暗号化メソッドで必要とされる長さに適合する限り、ASCII文字列を使用して値を暗号化できます。私はopensslコマンドからのbase64を取るときruby create既存のキー文字列からの暗号キー
require 'openssl'
cipher = OpenSSL::Cipher::Cipher.new 'AES-256-CBC'
cipher.encrypt
cipher.key = "2317823178123897237891232345345234524523452345"
cipher.iv = "123789123789123789"
encrypted = cipher.update "flipflop" + cipher.final
puts encrypted
cipher = OpenSSL::Cipher::Cipher.new 'AES-256-CBC'
cipher.decrypt
cipher.key = "2317823178123897237891232345345234524523452345"
cipher.iv = "123789123789123789"
plain = cipher.update(encrypted) + cipher.final
puts plain
���ISq��Ҷ0�e�
crypt.rb:14:in `final': bad decrypt (OpenSSL::Cipher::CipherError)
from crypt.rb:14:in `<main>'
はまた、私は悪い同じ取得:しかし、私はそのキーを取ると、私たちはルビーでこれを通じて実行する場合
printf 'flipflop' | openssl enc -K 2317823178123897237891232345345234524523452345 -iv 123789123789123789 -base64 -aes-256-cbc
Pd4+UEBW1RyTjARy1rpndQ==
printf 'Pd4+UEBW1RyTjARy1rpndQ==\n' | openssl enc -d -K 2317823178123897237891232345345234524523452345 -iv 123789123789123789 -base64 -aes-256-cbc
flipflop
:たとえば
復号化:
require 'openssl'
require 'base64'
clear = Base64.decode64("Pd4+UEBW1RyTjARy1rpndQ==")
cipher = OpenSSL::Cipher::Cipher.new 'AES-256-CBC'
cipher.decrypt
cipher.key = "2317823178123897237891232345345234524523452345"
cipher.iv = "123789123789123789"
plain = cipher.update(clear) + cipher.final
puts plain
crypt.rb:10:in `final': bad decrypt (OpenSSL::Cipher::CipherError)
from crypt.rb:10:in `<main>'
ここで起こっていることは、OpenSSLが自分のcipを変換していることです彼女のキーとIV一方通行、そしてルビーは別のことをやっている。たとえば、PBKDF2を使用してキーを作成すると、「\ x00 \ AF ...」のような16進数の文字列が得られます。
これは手元にある問題ですか?私は文字列を特定の形式に変換する必要がありますか?それ、どうやったら出来るの?それは問題ではないですか?
はまた、OpenSSLが1.1.0でデフォルトのコマンドライン値を変更することに注意してください。 1.0.2(またはそれ以下)の 'openssl enc'を使用し、1.1.0以上の' openssl dec 'を使用する人々にとってはかなりの量のトラブルを引き起こします。 OpenSSLユーザーリストの[古いopensslファイルの解読](https://mta.openssl.org/pipermail/openssl-users/2017-February/005270.html)も参照してください。 – jww