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

Ken*_*Yap 4 laravel laravel-5

只是一个简单的问题,如果我使用Laravel 5 Crypt::encrypt()功能,我想将它保存到数据库中,我期待多少个字符?字符长度是否取决于我的消息长度还是固定长度?

目前我在我的数据库中使用varchar 255,并且不时有缺少的字符,因此在解密过程中会出现问题.

谢谢

Har*_*Geo 7

从Laravel官方文档中:

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

从使用mcrypt_generic的官方PHP文档.

如果要将加密数据存储在数据库中,请确保存储mcrypt_generic返回的整个字符串,否则字符串将无法完全正确解密.如果原始字符串长度为10个字符且块大小为8(使用mcrypt_enc_get_block_size()来确定块大小),则数据库字段中至少需要16个字符.请注意,mdecrypt_generic()返回的字符串也将是16个字符...使用rtrim($ str,"\ 0")来删除填充.

更多这里

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

假设您使用的是MySQL,如果要分析大量信息,为什么不使用TEXT呢?有关MySQL字段类型的更多信息,请访问


jdf*_*the 5

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

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

这是 GitHub 要点

这是示例输出:

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
Run Code Online (Sandbox Code Playgroud)

注意 - 如果你自己运行它,你需要将它设置为每个字符串长度大约 100 万次传递以获得实际的最小和最大限制。500,000 在我的测试中是不够的。此外,该get_random_input函数最多只能输出 32 个字符的字符串,因此必须对其进行修改以测试更长的字符串。