簡體   English   中英

如何使用php加密和解密mysql數據庫中的數據?

[英]How to encrypt and decrypt data in the mysql database using php?

當我將內容添加到mysql數據庫時,我想加密php文件中的一些數據。

這就是我的方法。

我創建一個靜態密鑰,如:

$key = md5("uJHyFVSG");

然后,我有兩個函數,分別稱為crypto()和crypto(),它們執行此操作:

function encrypt($string, $key){
    $string = rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_ECB)));
    return $string;
}

function decrypt($string, $key){
    $string = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($string), MCRYPT_MODE_ECB));
    return $string;
}

我不確定這是否是最佳做法,但是像我如何生成除md5以外的密鑰?

然后我有兩個函數,分別稱為crypto()和crypto()

不要在您的問題中使用代碼!

實際上,請重新訪問您在哪里找到它,並告訴他們他們的代碼不安全,並且他們不應該鼓勵人們使用它。

我創建一個靜態密鑰,如:

 $key = md5("uJHyFVSG"); 

更好的主意: 使用庫

// Generate this once, then save it.
$key = Crypto::createNewRandomKey();
/*
    var_dump(Crypto::binToHex($key));
    // then later:
    $key = Crypto::hexToBin("the generated hex characters go here");
*/

// To encrypt:
$encrypted = Crypto::encrypt(
    "This is what you're trying to protect",
    $key
);

// To decrypt:
$plaintext = Crypto::decrypt(
    $encrypted,
    $key
);

上面鏈接的庫(由Taylor Hornby制造)提供了一個稱為Authenticated Encryption的東西,它與AEAD方案(帶有關聯數據的Authenticated Encryption)一起是任何人在2016年應該加密任意數據的唯一方法

您甚至不必特別在意該細節或其他任何細節,但是如果您對自己的代碼片段感到好奇,可以:

  • 它使用ECB模式
  • 它使用的是Rijndael-256,而不是AES
  • Libmcrypt用\\0填充消息,直到達到塊大小的倍數為止,因此,如果您正在加密可能以一個或多個\\0字節結尾的任何內容,則在解密消息時准備丟失數據。
  • 另外, rtrim()將吞噬其他字節(最顯着的是\\x20

順便說一句,所有這些都已經在這里這里這里這里得到了普遍回答。 如果您只想搜索那么已經在Stack Exchange上觸手可及的地方就有關於加密最佳實踐的大量信息。

名稱中有一個線索:Rijndael 256使用256位密碼。 您正在使用64位密鑰(實際上您僅使用48位,但分布在64位上)。 另外,您可能想考慮源代碼以外的其他地方來存儲密鑰。

您的系統上有很多隨機數生成器可供選擇。 但是您沒有說這可以在什么操作系統上運行,也沒有說安裝什么PHP模塊。 但是由於您已經在使用mcrypt,因此可以使用mcrypt_create_iv (256); (提示:如果您需要將值存儲為ASCII,則base64對值進行編碼。

暫無
暫無

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

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