Php 尝试在Laravel中存储加密字符串时出错
我正在实现一个基于 我已将代码放入模型事件函数中:Php 尝试在Laravel中存储加密字符串时出错,php,encryption,laravel,utf-8,mcrypt,Php,Encryption,Laravel,Utf 8,Mcrypt,我正在实现一个基于 我已将代码放入模型事件函数中: public static function boot() { parent::boot(); // Setup event bindings... static::creating(function($account) { /* encrypt password and save iv */ $encryption = self::encrypt($account->d
public static function boot()
{
parent::boot();
// Setup event bindings...
static::creating(function($account)
{
/* encrypt password and save iv */
$encryption = self::encrypt($account->db_password); // or: Input::get('db_password')
$account->db_password = $encryption['encrypted_string'];
$account->iv = $encryption['iv'];
Log::debug($account);
//print_r ($encryption);
});
}
public static function encrypt($string)
{
// Generate an IV
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CFB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM);
// Encrypt the string
$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $_ENV['ACCOUNT_KEY'], $string, MCRYPT_MODE_CFB, $iv);
return ['encrypted_string' => $encrypted_string, 'iv' => $iv];
}
在我的数据库种子程序中,我调用Model::create,以使字符串在保存之前加密。这是从我的测试中调用的。然而,我越来越
[ErrorException]
json_encode(): Invalid UTF-8 sequence in argument
我已经确定列类型是二进制的
额外信息:当我对任何一个值($iv或$string)执行mb_detect_编码时,我要么得到UTF-8,要么什么都没有,我猜这取决于结果中出现的随机字符 我的解决方案:对于存储和传输,加密字符串和IV需要进行base64编码 上面的相关行更改为:
return [
'encrypted_string' => base64_encode($encrypted_string),
'iv' => base64_encode($iv)
];
当然,在使用存储的IV值解密字符串之前,必须使用base64_解码 请对字符串执行
mb\u detect\u encoding()
,然后执行exit()
,结果是什么result@Ohgodwhy有问题的最新信息,谢谢。