mysql数据库中的blowFish数据存储
Posted
技术标签:
【中文标题】mysql数据库中的blowFish数据存储【英文标题】:blowFIsh data store in mysql database 【发布时间】:2014-01-12 15:06:14 【问题描述】:我正在使用河豚加密功能:
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
但每次我尝试插入时,插入就像“?I??YR?” 现在该怎么办?
【问题讨论】:
【参考方案1】:我建议不要在 SQL 数据库中存储(可能)二进制,即非 AlphaNumeric 数据,尤其是不要存储在 varchar(..) 中,这会在您尝试查看数据时搞砸。
相反,无论是 Base64 还是 HEX 都对其进行编码,HEX 可能是更好的选择,对于 HEX 来说,它非常简单且原生于 mysql:
INSERT INTO table SET Password = HEX(?)
?
是 Blowfish 结果的占位符
要从数据库中获取二进制数据,请执行以下操作:
INSERT UNHEX(Password) FROM table
【讨论】:
以上是关于mysql数据库中的blowFish数据存储的主要内容,如果未能解决你的问题,请参考以下文章