![](/img/trans.png)
[英]MySql AES_DECRYPT & AES_ENCRYPT Key is not working in PHP
[英]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.