如果我正在使用Laravel 5 Crypt::encrypt()
函数,我想将它保存到数据库中,我想要多少个字符?字符长度是否取决于我的消息长度还是固定长度?
目前我在我的数据库中使用varchar 255,并且不时有缺少的字符,因此在解密过程中会出现问题。
谢谢
答案 0 :(得分:7)
来自官方的Laravel文档:
Laravel通过Mcrypt提供强大的AES加密功能 PHP扩展。
使用mcrypt_generic的官方PHP文档。
如果要将加密数据存储在数据库中,请确保 存储由mcrypt_generic或字符串返回的整个字符串 不会完全解密。如果您的原始字符串是10 字符长,块大小为8(使用 mcrypt_enc_get_block_size()来确定blocksize),你会的 数据库字段中至少需要16个字符。注意字符串 由mdecrypt_generic()返回的也是16个字符......使用 rtrim($ str," \ 0")删除填充。
更多here
所以我想正确的答案是,加密函数生成的字符大小取决于您通过加密函数解析的文本的大小。
假设您使用的是MySQL,为什么在解析大量信息时不要使用TEXT? 有关MySQL字段类型here
的更多信息答案 1 :(得分:3)
答案很难定义,因为它取决于您的输入大小。但即使是固定的输入大小也会产生不同的大小输出。
我创建了一个简单的脚本来测试不同字符串长度的实际大小。
以下是示例输出:
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万次传递,以获得实际的最小硬限制和最大限制。在我的测试中,500,000还不够。此外,get_random_input
函数仅输出最多32个字符的字符串,因此必须对其进行修改以测试更长的字符串。
答案 2 :(得分:1)
输出DOES取决于输入的大小,因此为列而不是VARCHAR使用TEXT数据类型更安全。 要测试它,请在db列中获取尽可能大的字符串,然后通过encrypt()函数运行它以查看生成的字符串的大小。请注意,如果您对原始文本强制执行长度限制(在加密之前),那么您可能会使用VARCHAR。