Laravel 5 Crypt函数中预期的字符长度

Laravel 5 Crypt函数中预期的字符长度,laravel,laravel-5,Laravel,Laravel 5,如果我正在使用Laravel 5Crypt::encrypt()函数并希望将其保存到数据库中,那么我需要多少个字符?字符长度取决于消息的长度,还是固定长度 目前,我在数据库中使用varchar 255,有时会出现缺少字符的情况,从而导致解密过程中出现问题 感谢您来自拉雷维尔官方文档: Laravel通过Mcrypt提供强大的AES加密功能 PHP扩展 来自官方PHP文档,使用mcrypt_通用 如果要将加密数据存储在数据库中,请确保 存储mcrypt_generic返回的整个字符串,或 不会完全

如果我正在使用Laravel 5
Crypt::encrypt()
函数并希望将其保存到数据库中,那么我需要多少个字符?字符长度取决于消息的长度,还是固定长度

目前,我在数据库中使用varchar 255,有时会出现缺少字符的情况,从而导致解密过程中出现问题


感谢您

来自拉雷维尔官方文档:

Laravel通过Mcrypt提供强大的AES加密功能 PHP扩展

来自官方PHP文档,使用mcrypt_通用

如果要将加密数据存储在数据库中,请确保 存储mcrypt_generic返回的整个字符串,或 不会完全正确解密。如果原始字符串是10 字符长,块大小为8(使用 mcrypt_enc_get_block_size()来确定块大小),您可以 数据库字段中至少需要16个字符。注意字符串 mdecrypt_generic()返回的字符数也将为16个…请使用 rtrim($str,“\0”)删除填充

更多

所以我猜正确的答案是,加密函数生成的字符大小取决于通过加密函数解析的文本大小

假设您使用的是MySQL,如果您正在解析大量信息,为什么不使用文本呢?
关于MySQL字段类型的更多信息

答案很难定义,因为它确实取决于您的输入大小。但即使是固定的输入大小也会产生不同大小的输出

我创建了一个简单的脚本来测试不同字符串长度的真实大小

以下是示例输出:

Testing Laravel Crypt::encrypt() result length
Number of passes: 1000000
Minimum input length: 1
Maximum input length: 32
Input length: 1 - Output length 188 - 200
Input length: 2 - Output length 188 - 200
Input length: 3 - Output length 188 - 200
Input length: 4 - Output length 188 - 200
Input length: 5 - Output length 188 - 200
Input length: 6 - Output length 188 - 200
Input length: 7 - Output length 188 - 200
Input length: 8 - Output length 188 - 200
Input length: 9 - Output length 216 - 228
Input length: 10 - Output length 216 - 228
Input length: 11 - Output length 216 - 228
Input length: 12 - Output length 216 - 228
Input length: 13 - Output length 216 - 228
Input length: 14 - Output length 216 - 228
Input length: 15 - Output length 216 - 228
Input length: 16 - Output length 216 - 228
Input length: 17 - Output length 216 - 228
Input length: 18 - Output length 216 - 228
Input length: 19 - Output length 216 - 228
Input length: 20 - Output length 216 - 228
Input length: 21 - Output length 216 - 228
Input length: 22 - Output length 216 - 228
Input length: 23 - Output length 216 - 228
Input length: 24 - Output length 244 - 256
Input length: 25 - Output length 244 - 256
Input length: 26 - Output length 244 - 256
Input length: 27 - Output length 244 - 256
Input length: 28 - Output length 244 - 256
Input length: 29 - Output length 244 - 256
Input length: 30 - Output length 244 - 256
Input length: 31 - Output length 244 - 256
Input length: 32 - Output length 244 - 256

注意-如果您自己运行这个,您需要将它设置为每字符串长度大约100万次,以获得实际的最小和最大硬限制。50万在我的测试中是不够的。另外,
get\u random\u input
函数只输出最多32个字符的字符串,因此必须对其进行修改以测试更长的字符串。

输出确实取决于输入的大小,因此对列使用文本数据类型而不是VARCHAR更安全。
要测试它,请选取db列中可能最大的字符串,并通过encrypt()函数运行它,以查看结果字符串的大小。请注意,如果对原始文本强制执行长度限制(在加密之前),则可以不使用VARCHAR。

变量长度是由于json编码中转义的前斜杠造成的。这在7.0.8()中已经修复,因此现在加密的大小应该是确定的。