我对Encrypt Decrypt in Rails
和Laravel 5
案例:
我想在Rails中加密一些数据,有时在Laravel中会解密数据。我已经阅读了Laravel如何使用HMAC sha256, SAE-256-CBC
加密流并在Rails中执行流程。
但不幸的是,Laravel无法解密
这是我的代码:
@cipher = OpenSSL::Cipher.new('aes-256-cbc')
@key = ENV['LARAVEL_APP_KEY']
...
@cipher.encrypt
@cipher.key = Base64.decode64(@key)
iv = @cipher.random_iv
@cipher.iv = iv
encrypted = @cipher.update(PHP.serialize(string)) + @cipher.final
iv = base64_encode(iv)
encrypted = base64_encode(encrypted)
mac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), iv + encrypted, Base64.decode64(@key))
hash = { iv: iv, value: encrypted, mac: mac }
base64_encode(hash.to_json)
APP_KEY
在Rails和Laravel Encrypt 1000
,Laravel也将获得1000 Encrypt 1000
,Laravel获取加密(例如:eyfasffksffadsfreqw) 请帮忙!非常感谢!
答案 0 :(得分:0)
我知道这是一个老问题,但仍在回答,因为它可能会像我一样帮助将来的读者,这是工作功能,我只修复了代码中的小问题,例如OpenSSL :: HMAC中的序列错误.hexdigest并更改了不添加'/ n'的base64编码函数,例如Base64.encode64(您的代码帮助我更快地进行了归档)。
def encrypt(value, key)
@cipher = OpenSSL::Cipher.new('aes-256-cbc')
@cipher.encrypt
@cipher.key = @key
iv = @cipher.random_iv
@cipher.iv = iv
encrypted = @cipher.update(PHP.serialize(value)) + @cipher.final
iv = Base64.strict_encode64(iv)
encrypted = Base64.strict_encode64(encrypted)
mac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @key, iv + encrypted)
hash = { iv: iv, value: encrypted, mac: mac }
return Base64.strict_encode64(hash.to_json)
end
请注意,这里我使用的是未经编码的密钥,因此我没有对密钥进行解码,所以这取决于您的实现。