我使用的是河豚包壳功能:

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

10-02 19:38