如何使用crypt_keeper在Rails控制台解密加密的ssn_or_ein字段
解密crypt_keeper加密字段的实操方法(适配2.2.x版本)
前提确认
首先确认Candidate模型已经完成crypt_keeper配置,正常配置格式类似如下(密钥和盐一般存储在环境变量或项目加密配置文件中):
class Candidate < ApplicationRecord # 确认ssn_or_ein已经被声明为加密字段 crypt_keeper :ssn_or_ein, key: ENV['CRYPT_KEEPER_KEY'], salt: ENV['CRYPT_KEEPER_SALT'], provider: :aes end
方法1:自动解密(推荐)
crypt_keeper默认会自动处理加密字段的读写,你直接调用实例对象的对应属性即可拿到明文,不需要额外处理。
你可以直接在rails c中执行如下代码输出解密后的内容:
c_unknown = Candidate.where("ssn_or_ein like ?", "%______________________==_______________________==%") c_unknown.each do |candidate| puts "候选人ID:#{candidate.id},SSN/EIN明文:#{candidate.ssn_or_ein}" end
方法2:手动解密
如果需要单独解密某个加密字符串,可以直接调用crypt_keeper的AES provider手动处理:
- 先获取项目配置的加密密钥、加密盐(和模型配置的必须完全一致,否则解密失败)
- 在rails c中执行如下代码:
# 初始化解密工具 decryptor = CryptKeeper::Provider::Aes.new( key: "替换为你项目的CRYPT_KEEPER_KEY值", salt: "替换为你项目的CRYPT_KEEPER_SALT值" ) # 传入加密字符串解密 encrypted_text = "ryVhq2CJJabH2UN561Fmjg==$i2tsOrQXJvFXH7NfnSBs8w==" plain_text = decryptor.decrypt(encrypted_text)
常见问题排查
- 调用属性返回的还是加密内容:检查
Candidate模型的crypt_keeper配置是否漏加ssn_or_ein字段 - 手动解密返回乱码:确认使用的密钥、盐和项目配置完全一致,注意空格、换行符等隐形字符的影响
- 无法找到加密密钥:检查项目的
config/secrets.yml、.env文件或部署环境的环境变量配置
内容的提问来源于stack exchange,提问作者shashank barman
相关产品推荐
相关产品推荐

