gpt4 book ai didi

ruby-on-rails - 使用 Rails 加密、解密

转载 作者:行者123 更新时间:2023-12-03 06:29:25 26 4
gpt4 key购买 nike

不久前我看到可以在不包含任何库的情况下解密和加密 Rails 中的字符串,但我找不到该博客文章。

我希望能够加密和解密字符串而不包含任何内容。Rails 中的其他所有内容都使用相同的 key ,例如签名的 cookie。

有什么想法吗?

最佳答案

你是说这个吗?:ActiveSupport::MessageEncryptor 。以下是在 Ruby 2.4+ 应用程序上重用 Rails 5+ 的方法的 secret :

crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base[0..31])
encrypted_data = crypt.encrypt_and_sign('my confidental data')

加密数据可以通过以下方式解密:

decrypted_back = crypt.decrypt_and_verify(encrypted_data)

上面的示例使用 Rails 应用程序 key 的前 32 个字符作为加密和签名 key ,因为默认的 MessageEncryptor 密码 aes-256-gcm 需要 256 位 key 。按照惯例,在应用程序创建过程中,Rails 会生成一个 128 个十六进制数字字符串形式的 key 。

重要! Ruby 2.4升级说明

之前Ruby 2.4Rails 5没有 key 大小限制,并且流行将完整 secret 传递到加密器初始值设定项中:

# pre-2.4
crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base)

在内部,加密算法(OpenSSL 提供的 AES256GCM)仅使用 key 中的 32 个字符,但签名算法 (SHA1) 消耗了全部 128 个字符。

因此,在从 2.4 之前的 Ruby 升级应用程序时,并且该应用程序之前使用不受限制的 key 大小加密数据,MessageEncryptor 必须在第二个参数中获取完整的 secret ,以避免 ActiveSupport::MessageVerifier::InvalidSignature 遗留数据解密:

# post-2.4 upgrade
crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base[0..31], Rails.application.secrets.secret_key_base)

关于ruby-on-rails - 使用 Rails 加密、解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5492377/

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