gpt4 book ai didi

ruby-on-rails - 如何解决 OpenSSL::Cipher::Cipher#encrypt 的弃用警告

转载 作者:数据小太阳 更新时间:2023-10-29 08:42:06 29 4
gpt4 key购买 nike

我刚刚将我的 Mac 升级到 Snow Leopard,并启动并运行了我的 Rails 环境。除了 OSX 之外,我之前安装的唯一区别是我现在运行的是 ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0] (Snow Leopard默认)而不是 1.8.6。

我现在在运行我的代码时看到与 OpenSSL 相关的弃用警告:

警告:OpenSSL::Cipher::Cipher#encrypt 和 OpenSSL::Cipher::Cipher#decrypt 的参数已弃用;使用 OpenSSL::Cipher::Cipher#pkcs5_keyivgen 导出 key 和 IV

在第 4 行引起这些警告(它解码加密字符串)的我的代码示例:

1. def decrypt(data)
2. encryptor = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC')
3. key = "my key"
4. encryptor.decrypt(key)
5. text = encryptor.update(data)
6. text << encryptor.final
7. end

我正在努力了解如何解决这个问题,而 Google 并没有真正提供帮助。我应该尝试降级到 Ruby 1.8.6(如果是这样,最好的方法是什么?),我应该尝试隐藏警告(把我的头埋在沙子里吗?!)或者有一个简单的修复方法吗?可以在代码中应用吗?

最佳答案

由于 Ruby 中的隐式类型转换,旧的 Ruby 允许人们以完全错误的方式使用 PBE(基于密码的加密)。较新的版本修复了该问题,因此警告是一件好事。

您的示例准确地说明了问题。 Triple-DES 需要 24 字节的 key Material (包括奇偶校验),但您只提供了 6 个字节。您的 key Material 将被重复以弥补不足,这会导致 key 安全性降低。

正确的做法是使用 PKCS5 生成 key 和 IV(初始向量),它使用复杂的散列和迭代来使 key 更加安全。

Ruby 提供了以下示例代码。 pass 是您的 key ,您可以为 salt 使用任何硬编码值。

puts "--Encrypting--"
des = OpenSSL::Cipher::Cipher.new(alg)
des.pkcs5_keyivgen(pass, salt)
des.encrypt
cipher = des.update(text)
cipher << des.final
puts %(encrypted text: #{cipher.inspect})
puts

puts "--Decrypting--"
des = OpenSSL::Cipher::Cipher.new(alg)
des.pkcs5_keyivgen(pass, salt)
des.decrypt
out = des.update(cipher)
out << des.final
puts %(decrypted text: "#{out}")
puts

关于ruby-on-rails - 如何解决 OpenSSL::Cipher::Cipher#encrypt 的弃用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1349397/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com