Vit*_*oco 3 php mysql encryption laravel laravel-5
我正在使用 Laravel 5,对于一个项目,其中一个租户是必须加密存储在系统中的电子邮件。我正在使用 Laravel 5 的Crypt::外观,以及相关的encrypt()和decrypt()方法。
问题在于加密值似乎不同,即使给定相同的字符串。起初我认为这可能与VARCHAR字段最大长度有关,但是两个哈希值都回到了字段上设置的 255 长度之下。
以这个转储为例;
PHP
$hash1 = 'eyJpdiI6InJFNTFkdktpVU9cL1wvRTJPVk94SURiUT09IiwidmFsdWUiOiJIZVh4Y1NyUGpVcTVFVTNSbWdUNnJCUWRHSGZTcnFTQWJKa1h0Q1wvMEVtZnFuM3dDeFwvXC9hdUs4enFXXC94dEJ0cSIsIm1hYyI6IjFjNjZjODFjMjI5NTQ0NmVhZDUwODQzODE0OTQ4NTdjMzAxNTQ5Y2ZjY2M4YzRiODU0ZjIwNDhmMDA0Yjc4OWQifQ';
$hash2 = 'eyJpdiI6ImRBVWNKVTlJZVFmckk2T0c4cXNObFE9PSIsInZhbHVlIjoidElqcE5TMUFwVHZXeW12R3hKMFVFWlR0WmgxOFRBbW5cL2V3dUJ6VndsdktLYjVGR2JQQWpSUUNUWDBJbU5OQWEiLCJtYWMiOiI3MjM3ODNiMzc0NDJlNDVhYzFkOTBmMjhhOTk0MTUyM2FlNzM5ZGE4ODE3MTJlMDM5NWZiMzViZjM5OTA0MGRhIn0=';
$dump = [
'hash1' => $hash1,
'hash2' => $hash2,
'string1' => Crypt::decrypt($hash1),
'string2' => Crypt::decrypt($hash2)
];
return $dump;
Run Code Online (Sandbox Code Playgroud)
转储对象
hash1: "eyJpdiI6InJFNTFkdktpVU9cL1wvRTJPVk94SURiUT09IiwidmFsdWUiOiJIZVh4Y1NyUGpVcTVFVTNSbWdUNnJCUWRHSGZTcnFTQWJKa1h0Q1wvMEVtZnFuM3dDeFwvXC9hdUs4enFXXC94dEJ0cSIsIm1hYyI6IjFjNjZjODFjMjI5NTQ0NmVhZDUwODQzODE0OTQ4NTdjMzAxNTQ5Y2ZjY2M4YzRiODU0ZjIwNDhmMDA0Yjc4OWQifQ"
hash2: "eyJpdiI6ImRBVWNKVTlJZVFmckk2T0c4cXNObFE9PSIsInZhbHVlIjoidElqcE5TMUFwVHZXeW12R3hKMFVFWlR0WmgxOFRBbW5cL2V3dUJ6VndsdktLYjVGR2JQQWpSUUNUWDBJbU5OQWEiLCJtYWMiOiI3MjM3ODNiMzc0NDJlNDVhYzFkOTBmMjhhOTk0MTUyM2FlNzM5ZGE4ODE3MTJlMDM5NWZiMzViZjM5OTA0MGRhIn0="
string1: "admin03@y..sef...iman.com"
string2: "admin03@y..sef...iman.com"
Run Code Online (Sandbox Code Playgroud)
输入点代替字符以保护隐私,但它们完全相同。我唯一能想到的可能是某种字符集格式?
任何帮助解决此问题将不胜感激!
问候。
如果我理解您的问题,这就是为什么即使输入相同且密钥相同,加密结果也会不同?
(您提到这些是散列,但 Crypt::encrypt() 和decrypt() 用于对称加密)
Laravel Crypt 默认使用 CBC 模式。这意味着每次加密时它都会生成一个随机 IV,以确保输出始终不同。
如果不使用像 CBC 这样的模式,您就有泄露信息的风险。如果我知道,admin03@y..sef...iman.com总是要进行加密eyJpdiI6InJFNTFkdktpVU9cL1wvRTJPVk94SURiUT09IiwidmFsdWUiOiJIZVh4Y1NyUGpVcTVFVTNSbWdUNnJCUWRHSGZTcnFTQWJKa1h0Q1wvMEVtZnFuM3dDeFwvXC9hdUs4enFXXC94dEJ0cSIsIm1hYyI6IjFjNjZjODFjMjI5NTQ0NmVhZDUwODQzODE0OTQ4NTdjMzAxNTQ5Y2ZjY2M4YzRiODU0ZjIwNDhmMDA0Yjc4OWQifQ,那么即使不知道你的加密密钥,我还是知道一些关于你的消息(谁它被送往,例如)。
您可以在这里看到一个很好的风险示例。
编辑:如果这是用于密码存储,则不应使用 encrypt() 和decrypt()。您应该使用 bcrypt() 或 PBKDF2。否则,假设有妥协,攻击者可以解密您所有的用户密码。
| 归档时间: |
|
| 查看次数: |
6321 次 |
| 最近记录: |