我使用的是河豚包壳功能:
class Blowfish {
private $key;
private $iv;
public function __construct($key, $iv) {
$this->key = $key;
$this->iv = $iv;
}
public function encrypt($data) {
return mcrypt_encrypt(MCRYPT_BLOWFISH, $this->key, $data, MCRYPT_MODE_CBC, $this->iv);
}
public function decrypt($data) {
return mcrypt_decrypt(MCRYPT_BLOWFISH, $this->key, $data, MCRYPT_MODE_CBC, $this->iv);
}}
现在,当我用这个函数加密时,比如:
$blowfish = new blowfish('DfRgBWE4Y4T7UgTWEdFP1Y', '85440934');
echo $pass = $blowfish -> encrypt('12345');
它应该显示-->“I”媫YR”
但我不能把它保存在数据库表中。我的表格结构如下:
`Password` varchar(255) CHARACTER SET utf32 NOT NULL
但每次我试着插入它,插入就像“?我呢?“是吗?”
现在该怎么办?
最佳答案
我建议不要(潜在地)将二进制(即非字母数字数据)存储在SQL数据库中,特别是不要存储在varchar(..)中,当您试图查看数据时,这会使事情变得一团糟。
相反,不管是Base64还是HEX编码,HEX可能是更好的选择,对于HEX来说,它对于MySQL来说非常简单而且是本机的:
INSERT INTO table SET Password = HEX(?)
?
是Blowfish结果的占位符要从数据库中提取二进制数据,请执行以下操作:
INSERT UNHEX(Password) FROM table