2

注: テキストの対称暗号化には OpenSSL を使用します。

OpenSSL をテストするために Ruby スクリプトを作成しましたが、異なる結果が得られることがわかりました。キー、iv、および暗号は同一であるため、結果は同一であると予想されます。しかし、そうではありません。これが私のスクリプトです:

require 'openssl'
require 'base64'

key = "00000000000000000000000000000000"
iv = "00000000000000000000000000000000"

### OPENSSL Command Line ###
puts "*** OpenSSL Command Line ***"
print "Encrypted via Command Line:  "
string = `printf %s \"Hello\" | openssl enc -aes-128-cbc -K #{key} -iv #{iv} -base64`

puts string
puts string.inspect

print "Decrypted Data is:  "
puts `printf %s \"BC2+AQJ6ZQx0al3GXba+EQ==\n\" | openssl enc -d -aes-128-cbc -K #{key} -  iv #{iv} -base64`
puts "\n"

### Ruby OpenSSL Library ###
puts "*** OpenSSL Ruby Library ***"

cipher = OpenSSL::Cipher.new('aes-128-cbc').encrypt
cipher.padding = 1
cipher.key = key
cipher.iv = iv

encrypted_data = cipher.update("Hello")
encrypted_data << cipher.final
encrypted_data = Base64.encode64(encrypted_data)
puts "Encrypted via Ruby is: #{encrypted_data}"
puts encrypted_data.inspect

decipher = OpenSSL::Cipher.new('aes-128-cbc').decrypt
decipher.key = key
decipher.iv = iv

data = decipher.update(Base64.decode64(encrypted_data))
data << decipher.final
puts "Decrypted Data:  #{data}"

結果は次のとおりです。

*** OpenSSL Command Line ***
Encrypted via Command Line:  BC2+AQJ6ZQx0al3GXba+EQ==
"BC2+AQJ6ZQx0al3GXba+EQ==\n"
Decrypted Data is:  Hello

*** OpenSSL Ruby Library ***
Encrypted via Ruby is: ZkeNEgsUXi1J7ps6kCQxdQ==
"ZkeNEgsUXi1J7ps6kCQxdQ==\n"
Decrypted Data:  Hello

ただ気になる結果。データが異なる原因は何ですか?

4

2 に答える 2

0

Ruby の OpenSSL インターフェースを知らなくても、ただの推測です。

キーと初期化ベクトルをコマンド ライン OpenSSL に 16 進エンコードで指定します。たとえば、キーと初期化ベクトルは0x000....

あなたの Ruby ライブラリはキーと初期化ベクトルをバイナリ データとして受け取ると思います。たとえば、実際0x30303030...には0x00000....

于 2011-09-19T15:56:01.890 に答える