我认为当我从MySQL切换到PostgreSQL时,我开始收到此错误。 我编写了代码来加密包含敏感数据的解密模型属性,我让它工作到db开关。
我有以下代码:
@pbk = OpenSSL::PKey::RSA.new File.read("#{RAILS_ROOT}/cert/pb_sandwich.pem")
@pvk = OpenSSL::PKey::RSA.new File.read("#{RAILS_ROOT}/cert/tuna_salad.pem"), 'pass45*'
model.sendata = Base64.encode64 @pbk.public_encrypt(model.sendata)
我在保存时运行该代码。我也先尝试过使用Base64。
然后当我尝试阅读:
@pvk.private_decrypt Base64.decode64(model.sendata)
我收到此错误:
OpenSSL::PKey::RSAError: data greater than mod len
在我使用MySQL之前,我从来没有这样做过。我真的不记得sendata列在MySQL中的数据类型,但在我当前的PostgreSQL设置中,该列是数据类型bytea
我认为这是问题,因为它曾经与MySQL一起工作。如果我想跳过必须执行Base64编码/解码的额外步骤,该列应该是什么数据类型?如果那就是问题。
另外需要注意的是,我已经尝试使用mod长度生成私钥:2048,4096和5120,我总是得到相同的错误。此外,sendata字段在编码之前不是很长,它在40个字符以下。
我现在很难过,有什么想法吗?
答案 0 :(得分:0)
您可能没有在数据库中正确存储密钥。可能有一些字段被截断。
您获得的消息可能意味着数据太长而无法使用如此小的密钥进行加密。如果是这种情况,您应该使用AES加密数据并使用RSA加密AES密钥。然后发送加密数据和加密密钥。