如何在ruby中重构OpenSSL pkcs5_keyivgen?
我在过去的一年里在我的应用程序中使用了以下代码,使用此代码有200k记录:
options = { :algorithm => 'aes-256-cbc', :value => "changethis", :key => "secretkey" } cipher = OpenSSL::Cipher::Cipher.new(options[:algorithm]) cipher.send(:encrypt) cipher.pkcs5_keyivgen(options[:key]) result = cipher.update(options[:value]) result < "x\xED\x14s\xFD\x0E\x97\xC5\x996[M\x1E\x94\xDEI"
我需要(按业务)重构pkcs5_keyivgen
部分,以正确执行:例如,
options = { :algorithm => 'aes-256-cbc', :value => "changethis", :key => "secretkey" } cipher = OpenSSL::Cipher::Cipher.new(options[:algorithm]) cipher.send(:encrypt) cipher.key = '' # ??? 1) How does pkcs5_keyivgen in above code generate key, or does it just use my options[:key] cipher.iv = '' # ??? 2) How does pkcs5_keyivgen in above code generate iv result = cipher.update(options[:value]) result << cipher.final
我必须弄清楚pkcs5_keyivgen
如何设置key
和iv
。 想法在这里? 我们使用ruby-1.9.3-p286和encryptor-1.1.3
我看到了这个问题和这个问题 ,但他们没有帮我解决问题。
试图解决这个问题,但我认为没有简单的解决方案,或者我只是看不到一个)。 不推荐使用Pkcs5_keyivgen()
,并为AES 256实现非标准密钥派生。
从这个文档和这个源代码
Pkcs5_keyivgen (pass, SALT = nil, num = 2048, digest = "MD5") -> nil
从salt生成一些键和IV并通过。 在你的情况下没有盐。 生成方法在v1.5 PKCS #5
定义(不建议使用)
所以你正在寻找“基于密码的密钥衍生function”。 PBKDF1
Pkcs5_keyivgen()
函数从Openssl调用EVP_BytesToKey()
, EVP_BytesToKey()
以非标准方式生成更大密钥大小的关键字节
因此MD5为MD5生成大小为EVP_MAX_MD_SIZE (16 + 20)
// 16的散列
但是AES key(32) + IV(16) sizes > EVP_MAX_MD_SIZE
,因此AES 256将需要多个哈希来生成随机密钥和IV。 这是C中算法的源代码
这里是EVP_BytesToKey()
很好的伪代码解释
如果你真的想重新实现PBKDF1,这里也是PBKDF1的RTC2898标准但是我不认为自己实现加密是个好主意
- 调用服务器到服务器CloudKit Web服务时的授权错误
- CSR失败:错误解析请求ASN1错误标记值已满足(ASN:267 CRYPT_E_ASN1_BADTAG)
- 如何以编程方式检查证书是否已被撤销?
- Lion:RVM安装rubies的问题 – 与openssl相关的问题
- 使用Net :: SSH :: Gateway设置隧道(挂在.new)
- 如何在Ruby中设置TLS上下文选项(如OpenSSL :: SSL :: SSL_OP_NO_SSLv2)
- SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv2 / v3读取服务器hello A.
- OpenSSL :: SSL :: SSLContext SNI servername_cb不工作
- 证书续订后,Ruby Net :: HTTP响应OpenSSL :: SSL :: SSLError“证书validation失败”