簡體   English   中英

在Laravel中解密使用MySQL中的AES_ENCRYPT加密的數據

[英]Decrypt Data in Laravel that was Encrypted Using AES_ENCRYPT in MySQL

我有一個與Laravel集成的舊數據庫。

數據庫中的某些varbinary字段是使用AES_ENCRYPT存儲在舊版應用程序的原始查詢中的。 在Laravel的Eloquent模型中,我想編寫一個訪問器,該訪問器可以在需要時解密此數據,而不必對數據庫進行額外的查詢。 我將如何處理?

舊版應用程序按以下方式加密數據:AES_DECRYPT(first_name,?)其中? 引用作為sha1('mykeyhere')傳入的密鑰。

有任何想法嗎?

沒人會做任何導致這種情況的事情,但是這里是使用不推薦使用的API對其進行解碼的方法。

/**
* @param string $crypted    Un-encoded input
* @param string $key        Key string provided to mysql AES_ENCRYPT();
* @return string
**/
function mysql_aes_decrypt($crypted, $key) {
    // mysql will happily fudge your key for you, so we do too
    $keylen = strlen($key);
    if( $keylen < 16 ) {
        $key = str_pad($key, 16, "\0");
    } else if( $keylen > 16 ) {
        $key = substr($key, 0, 16);
    }
    return openssl_decrypt($crypted, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
}

$plain = 'foo';
$key = 'bar';
// SELECT AES_ENCRYPT('foo', 'bar')
$crypted = hex2bin('93F254924801B8B0F000571DFD8C4A5E');

var_dump( mysql_aes_decrypt($crypted, $key) ); // string(3) "foo"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM