有没有办法改变 Laravel 加密算法,使其针对相同的字符串生成相同的值?
Is there a way to alter Laravel Encryption algorithm, so it generates the same value against the same string?
我正在使用 Laravel 的内置加密方法保存加密的用户数据(包括用于登录的用户电子邮件)。
登录时,我必须提供加密的电子邮件进行身份验证,但加密算法每次都会针对相同的字符串生成不同的字符串。
我正在使用以下特性来保存加密数据。
请问我该如何克服这个问题?
namespace App\Traits;
use Illuminate\Support\Facades\Crypt;
/**
* Class Encryptable
* @package App\Traits
*/
trait Encryptable
{
/**
* If the attribute is in the encryptable array
* then decrypt it.
*
* @param $key
*
* @return $value
*/
public function getAttribute($key)
{
$value = parent::getAttribute($key);
if (in_array($key, $this->encryptable) && $value !== '')
$value = Crypt::decrypt($value);
return $value;
}
/**
* If the attribute is in the encryptable array
* then encrypt it.
*
* @param $key
*
* @return $value
*/
public function setAttribute($key, $value)
{
if (in_array($key, $this->encryptable))
$value = Crypt::encrypt($value);
return parent::setAttribute($key, $value);
}
/**
* When need to make sure that we iterate through
* all the keys.
*
* @return array
*/
public function attributesToArray()
{
$attributes = parent::attributesToArray();
foreach ($this->encryptable as $key)
{
if (isset($attributes[$key]))
$attributes[$key] = Crypt::decrypt($attributes[$key]);
}
return $attributes;
}
}
用户模型中的用法
namespace App;
use App\Traits\Encryptable;
class User extends Authenticatable implements MustVerifyEmail
{
use Encryptable;
protected $encryptable = [
'first_name',
'sur_name',
'email',
'mobile',
];
}
你不知道。加密的有效载荷 每次都必须 不同,即使相同的明文被加密也是如此。 Laravel 做得很好。
此行为的原因是为了防止破解用于加密的算法和秘密。如果相同的有效负载产生完全相同的密文,则破解它的难度会提高一个数量级。
你的要求甚至不能解决你的问题。您的问题的解决方案不是改变加密方案,而是完全不同的东西。考虑删除此问题并询问您的实际问题而不是您尝试的解决方案。
我正在使用 Laravel 的内置加密方法保存加密的用户数据(包括用于登录的用户电子邮件)。
登录时,我必须提供加密的电子邮件进行身份验证,但加密算法每次都会针对相同的字符串生成不同的字符串。
我正在使用以下特性来保存加密数据。
请问我该如何克服这个问题?
namespace App\Traits;
use Illuminate\Support\Facades\Crypt;
/**
* Class Encryptable
* @package App\Traits
*/
trait Encryptable
{
/**
* If the attribute is in the encryptable array
* then decrypt it.
*
* @param $key
*
* @return $value
*/
public function getAttribute($key)
{
$value = parent::getAttribute($key);
if (in_array($key, $this->encryptable) && $value !== '')
$value = Crypt::decrypt($value);
return $value;
}
/**
* If the attribute is in the encryptable array
* then encrypt it.
*
* @param $key
*
* @return $value
*/
public function setAttribute($key, $value)
{
if (in_array($key, $this->encryptable))
$value = Crypt::encrypt($value);
return parent::setAttribute($key, $value);
}
/**
* When need to make sure that we iterate through
* all the keys.
*
* @return array
*/
public function attributesToArray()
{
$attributes = parent::attributesToArray();
foreach ($this->encryptable as $key)
{
if (isset($attributes[$key]))
$attributes[$key] = Crypt::decrypt($attributes[$key]);
}
return $attributes;
}
}
用户模型中的用法
namespace App;
use App\Traits\Encryptable;
class User extends Authenticatable implements MustVerifyEmail
{
use Encryptable;
protected $encryptable = [
'first_name',
'sur_name',
'email',
'mobile',
];
}
你不知道。加密的有效载荷 每次都必须 不同,即使相同的明文被加密也是如此。 Laravel 做得很好。
此行为的原因是为了防止破解用于加密的算法和秘密。如果相同的有效负载产生完全相同的密文,则破解它的难度会提高一个数量级。
你的要求甚至不能解决你的问题。您的问题的解决方案不是改变加密方案,而是完全不同的东西。考虑删除此问题并询问您的实际问题而不是您尝试的解决方案。