Php 在Rails中加密,在Laravel中解密

Php 在Rails中加密,在Laravel中解密,php,ruby,laravel,encryption,Php,Ruby,Laravel,Encryption,我有一个关于Rails中的加密解密和Laravel 5 案例: 我想在Rails中加密一些数据,数据有时会在Laravel中解密。我已经阅读了Laravel如何使用HMAC sha256、SAE-256-CBC对流进行加密,并在Rails中执行流。 但不幸的是,拉威尔无法解密 这是我的代码: @cipher = OpenSSL::Cipher.new('aes-256-cbc') @key = ENV['LARAVEL_APP_KEY'] ... @cipher.encrypt @ciphe

我有一个关于Rails中的
加密解密
Laravel 5

案例: 我想在Rails中加密一些数据,数据有时会在Laravel中解密。我已经阅读了Laravel如何使用
HMAC sha256、SAE-256-CBC对流进行加密,并在Rails中执行流。
但不幸的是,拉威尔无法解密

这是我的代码:

@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)
  • Rails和Laravel之间的
    APP_键
    已经相同
  • 预期结果:Rails
    加密1000
    ,Laravel也将获得1000
  • 实际结果:Rails
    Encrypt 1000
    ,Laravel获得加密(例如:eyfasffksffadsfreqw)

请帮忙!非常感谢

我知道这是一个老问题,但仍然在回答,因为它可能会帮助像我一样的未来读者,这是工作函数,我只修复了您在代码中遇到的小问题,比如OpenSSL::HMAC.hexdigest中的序列错误,并更改了base64编码函数,该函数没有添加“/n”比如base64.encode64(您的代码帮助我更快地存档)


请注意,这里我使用的是未编码的密钥,因此我没有解码密钥,因此这取决于您的实现。

解密代码在哪里?@SergioTulentsev解密代码使用的是来自laravel的基本解密。就像这个解密($value);我不知道RoR的情况,但Laravel也基于我在这里写的结果@Kyslik让我检查一下链接。谢谢
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