【发布时间】:2014-06-23 10:08:20
【问题描述】:
我找到了一个很好的基本密码类,我现在用它来转换我的 MySQL 数据库中的所有纯文本密码。目前包含密码的行是 varchar(64),但我相信它们应该转换为 char(128)。任何人都可以确认 128 长度对于此类返回的加密哈希是否足够长?
我看到它使用 sha256 对密钥进行哈希处理,但使用 MCRYPT_RIJNDAEL_128,所以我不确定是否需要将长度设为 char(128) 或 char(256)
<?php
class Cipher
{
private $securekey;
private $iv_size;
function __construct($textkey)
{
$this->iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$this->securekey = hash('sha256', $textkey, TRUE);
}
function encrypt($input)
{
$iv = mcrypt_create_iv($this->iv_size);
return base64_encode($iv . mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->securekey, $input, MCRYPT_MODE_CBC, $iv));
}
function decrypt($input)
{
$input = base64_decode($input);
$iv = substr($input, 0, $this->iv_size);
$cipher = substr($input, $this->iv_size);
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->securekey, $cipher, MCRYPT_MODE_CBC, $iv));
}
}
?>
【问题讨论】:
-
如果要在mysql中使用实际的加密算法,请参考this link。为您节省几行 PHP 代码。
标签: php mysql encryption mcrypt