1

我已经知道这个问题的答案,但我想对下一步走的路有更多的一般意见。

我希望在我的应用程序数据库中通过加密保护用户的电子邮件,但电子邮件是电子邮件,我也希望它们作为用户表上的索引。

我正在为数据库播种并不断收到错误消息:

[Illuminate\Encryption\DecryptException]  
Invalid data.

我发现 Crypt::encrypt() 生成的一些秘密似乎超过了 MySQL 对唯一索引的 255 字节限制。我想最终我将不得不扩展 Illuminate 包的 Encrypter 类并覆盖核心加密方法以使用不会扩展字符串的东西。

有什么我想念的东西可以做得更好吗?无论如何,将它们存储为加密格式可能不是很有效,但我想不出什么特别好的东西?

4

1 回答 1

3

您的方法毫无意义,因为 Crypt::encrypt() 会自动“加盐”这些值。同一封电子邮件每次都会生成不同的加密值。自己检查一下:

for($i = 1; $i <= 10; $i++)
{
    echo Crypt::encrypt('secret');
}

即使您设法克服了索引列大小限制,您仍然无法检查重复项。

于 2013-11-12T18:45:14.683 回答