2017-05-17 83 views
0

對於我們正在將Laravel應用程序遷移到Ruby應用程序的客戶。我們有一些數據存儲在我們想在Ruby世界中解密的數據庫中。Laravel Crypt ::解密遷移到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 

感謝您的幫助!

+0

製作一個運行Laravel解密的命令行腳本可能會更容易,然後通過ruby系統命令運行該命令來獲取輸出。特別是因爲這是一次性工作。 –

回答

2

您可以使用大多數標準庫來逆向工程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:(如果它的存在)。

+0

我的男人!感謝一堆這個作品! – Hendrik