0 php security encryption cryptography mcrypt
当我将这些东西添加到我的mysql数据库时,我想加密我的php文件中的一些数据.
我就是这样做的.
我创建一个静态键,如:
$key = md5("uJHyFVSG");
Run Code Online (Sandbox Code Playgroud)
然后我有两个函数,名为encrypt()和decrypt(),他们这样做:
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;
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是最佳做法,但是我如何生成除md5以外的密钥?
然后我有两个函数,名为encrypt()和decrypt()
事实上,重新访问你发现它的地方并告诉他们他们的代码是不安全的,他们不应该鼓励人们使用它.
我创建一个静态键,如:
Run Code Online (Sandbox Code Playgroud)$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
);
Run Code Online (Sandbox Code Playgroud)
上面链接的库(由Taylor Hornby制作)提供了一种名为Authenticated Encryption的东西,它与AEAD方案(带有关联数据的Authenticated Encryption)一起是2016年任何人应该加密任意数据的唯一方式.
您甚至不必特别关心该细节或其他任何细节,但如果您对您的代码片段感到好奇:
\0到块大小的倍数,因此如果您正在加密任何可能以一个或多个\0字节结尾的内容,请准备在解密消息时丢失数据.rtrim()将吞噬其他字节(\x20最值得注意的是)顺便说一下,这里,这里,这里和这里已经回答了所有这些问题.如果您只搜索它,那么在Stack Exchange的指尖上已经有大量关于加密最佳实践的信息.
| 归档时间: |
|
| 查看次数: |
5670 次 |
| 最近记录: |