【发布时间】:2012-01-23 07:46:42
【问题描述】:
我需要在我的 Rails 应用程序中进行加密和解密。我尝试使用 ezcrypto,但每当我解密时都会出现此错误。
OpenSSL::Cipher::CipherError in ProfilesController#show
wrong final block length
需要更改哪些内容才能阻止此错误。我尝试使用这样的 openssl 的另一种实现(从我的模型中调用的方法)
def encrypt_attr(unencrypted)
c = OpenSSL::Cipher.new("aes-256-cbc")
c.encrypt
c.key = Digest::SHA1.hexdigest('pass')
e = c.update(unencrypted)
e << c.final
return e
end
def decrypt_attr(encrypted_attr)
if encrypted_attr != ""
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.decrypt
c.key = Digest::SHA1.hexdigest('pass')
d = c.update(encrypted_attr)
d << c.final
return d
end
end
它在解密时抛出完全相同的错误。我应该如何进行加密和解密而不得到这个openssl错误。
【问题讨论】:
-
嗯,我的错,你在
c.key中确实有相同的密钥 -
为我工作。仅当
encrypted_attr!=e来自encrypt_attr方法时,我才会收到此错误。在这种情况下,您应该在decrypt_attr方法中使用rescue -
@jack,出于好奇,如果您使用密码块链接,您的初始化向量在哪里?参见 5.3,初始化向量,csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
标签: ruby-on-rails ruby encryption openssl