繁体   English   中英

Laravel地穴::解密向红宝石的迁移

[英]Laravel Crypt::decrypt migration to ruby

对于客户,我们正在将Laravel应用程序迁移到Ruby应用程序。 我们有一些存储在数据库中的数据,我们希望在红宝石世界中解密。

这是用于加密数据的laravel部分: https ://laravel.com/docs/5.0/encryption

现在,将数据导入红宝石时,我们需要一个可以解密数据的计数器。

在laravel控制台中,我能够像这样解密数据:

>>> Crypt::decrypt('eyJpdiI6ImZyek9ZTjJNSW5ZYlhSa2ZYUldVbEE9PSIsInZhbHVlIjoia20zMTRLWEpCdXM2K05DZDBHSlE5SDlcL2pYVXk5aE5RWWR3dHFQT1dGQzA9IiwibWFjIjoiZWZlNGE3NTRhMDDlNzk2MjhlYjI1Mzc1NGNiYmRjNDMwZjM1NzdiMzkyZTU4ZjA4ZDNkMGE0YjUyOTBjMDAzOCJA')
=> "123123123123"

我不是laravel专家,但是在app.php文件中设置了一个秘密密钥。 因此,我需要能够以某种方式将其传递给解密函数。

目标是拥有一个使用laravel密码,加密密钥并返回解密值的ruby函数。

def decrypt_laravel_crypt(value, encryption_key)
end

谢谢您的帮助!

您可以使用大多数标准库对Laravel的Encrypter :: decrypt方法进行反向工程。 Laravel会在加密之前序列化数据,除非明确告知不要这样做。 这意味着在使用解密的字符串之前尝试对其进行反序列化。

require 'base64'
require 'openssl'
require 'json'
require 'php_serialize'

def lara_decrypt(encryptedString, appKey)
   data = JSON.parse(Base64::decode64(encryptedString))

   decipher = OpenSSL::Cipher.new('aes-256-cbc')
   decipher.decrypt
   decipher.key = Base64::decode64(appKey)
   decipher.iv = Base64::decode64(data['iv'])
   decrypted = decipher.update(Base64::decode64(data['value'])) + decipher.final
   begin
      PHP.unserialize(decrypted)
   rescue
      decrypted
   end
end

同样,在设置应用程序密钥时,请确保从其开头删除base64:如果存在)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM