document表示Cipher.reset完全重置了密码的内部状态。
我理解该文档为Cipher.reset会重置密钥,静密密码和其他密码状态。
为了确认,我尝试了下面的代码。
require 'openssl'
enc = OpenSSL::Cipher.new('AES-256-CBC').encrypt
key = enc.random_key
iv = enc.random_iv
enc.reset res = ""
res << enc.update('abc')
res << enc.final
p res
如果Cipher.reset重置密钥和iv,则每次脚本运行时加密的字符串(res)必须相同。
但我每次都得到不同的结果。
所以我猜Cipher.reset没有重置密钥和iv 是不是? Cipher.reset做了什么?
答案 0 :(得分:1)
我刚刚遇到了和你一样的问题,我已经设计了以下测试:
# encrypt data1 with random key and iv
cipher = OpenSSL::Cipher.new('aes-256-cbc')
cipher.encrypt
key = cipher.random_key
iv = cipher.random_iv
data1 = cipher.update('a') + cipher.final
# reset cipher, and encrypt with same key as above, don't touch iv
cipher.reset
cipher.encrypt
cipher.key = key
data2 = cipher.update('a') + cipher.final
# reset cipher, don't touch key or iv
cipher.reset
cipher.encrypt
data3 = cipher.update('a') + cipher.final
data1 == data2 && data2 == data3 # => true
因为你可以看到iv和key都没有被重置更改,因为data1
,data2
和data3
都是相同的。