首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel Crypt::解密向红宝石的迁移

Laravel Crypt::解密向红宝石的迁移
EN

Stack Overflow用户
提问于 2017-05-17 14:57:27
回答 1查看 261关注 0票数 0

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

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

现在,当将数据导入到ruby时,我们需要一个可以解密数据的计数器部件。

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

代码语言:javascript
复制
>>> Crypt::decrypt('eyJpdiI6ImZyek9ZTjJNSW5ZYlhSa2ZYUldVbEE9PSIsInZhbHVlIjoia20zMTRLWEpCdXM2K05DZDBHSlE5SDlcL2pYVXk5aE5RWWR3dHFQT1dGQzA9IiwibWFjIjoiZWZlNGE3NTRhMDDlNzk2MjhlYjI1Mzc1NGNiYmRjNDMwZjM1NzdiMzkyZTU4ZjA4ZDNkMGE0YjUyOTBjMDAzOCJA')
=> "123123123123"

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

目标是拥有一个ruby函数,它接受laravel密码、加密密钥并返回解密后的值。

代码语言:javascript
复制
def decrypt_laravel_crypt(value, encryption_key)
end

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-18 04:36:46

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

代码语言:javascript
复制
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:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44028396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档