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数据存储的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储引擎中的MyISAM和InnoDB区别详解

短语密码(blowfish_secret)的设置

MySQL的介绍以及使用

mysql返回修改后

为我的模式中的所有表自动生成 DML 存储过程的工具-MySQL

MySQL逻辑架构