[英]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年應該加密任意數據的唯一方法 。
您甚至不必特別在意該細節或其他任何細節,但是如果您對自己的代碼片段感到好奇,可以:
\\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.