gpt4 book ai didi

php - Laravel 4 加密 : how many characters to expect

转载 作者:行者123 更新时间:2023-11-29 01:09:51 24 4
gpt4 key购买 nike

我刚刚遇到了一个有趣的小问题。

使用 Laravel 4,我在将一些条目添加到数据库之前对其进行了加密,包括电子邮件地址。

数据库的默认 varchar 长度设置为 255。

我刚刚有一个加密为 309 个字符的条目,通过切断数据库中的最后 50 个字符来破坏加密。

我已经(暂时)通过简单地将 varchar 的长度增加到 500 来解决这个问题,这在理论上应该可以解决这个问题,但我想确定一下。

我不确定加密是如何工作的,但是为了设置我的数据库,有没有办法告诉加密输出期望的最大字符长度?

我是否应该将我的字段类型从 varchar 更改为其他类型以确保不再发生这种情况?

最佳答案

结论

首先,请注意 4.0.0 和 4.2.16(似乎是最新版本)之间有不少变化。

该方案以 4.2 的 188 个字符和 4.0 的大约 244 个字符的惊人开销开始(假设我没有忘记任何换行符等)。因此,为了安全起见,您可能需要 4.2 的 200 个字符和 4.0 的 256 个字符加上纯文本大小的 1.8 倍,如果明文中的字符被编码为单个字节。

分析

我刚刚查看了 source code of Laravel 4.0Laravel 4.2关于这个功能。让我们先来看看尺寸:

  1. 数据是序列化的,因此加密大小取决于值类型的大小(可能是字符串);
  2. 序列化数据是 使用 Rijndael 256 或 AES 填充的 PKCS#7,因此这意味着添加 1 到 32 字节或 1 到 16 字节 - 取决于 4.0 或 4.2 的使用;
  3. 此数据使用 key 和 IV 加密;
  4. 密文和IV分别转成base64;
  5. 在 base64 编码的密文上使用 SHA-256 计算 HMAC,返回 64 字节的小写十六进制字符串
  6. 那么密文由base64_encode(json_encode(compact('iv', 'value', 'mac')))组成(其中值是 base 64 密文,mac 是 HMAC 值,当然)。

PHP is serialized as s:<i>:"<s>"; 中的字符串其中 <i>是字符串的大小,<s>是字符串(我假设这里的 PHP 平台编码关于大小)。请注意,我不是 100% 确定 Laravel 没有使用任何环绕字符串值的方法,也许有人可以帮我解决这个问题。

计算

总而言之,一切都在很大程度上取决于字符编码,对我来说做出一个好的估计是相当危险的。现在让我们假设字节和字符之间是 1:1 的关系(例如 US-ASCII):

  1. 对于不超过 999 个字符的字符串,序列化最多添加 9 个字符
  2. 填充加起来为 16 或 32 个字节,我们假设它们也是字符
  3. 加密使数据保持相同大小
  4. PHP 中的 base64 创建 ceil(len / 3) * 4字符 - 但让我们将其简化为 (len * 4) / 3 + 4 , base 64 编码的 IV 是 44 个字符
  5. 完整的 HMAC 是 64 个字符
  6. JSON 编码为引号和冒号添加 3*5 个字符,加上 4 个字符用于括号和逗号,总共 19 个字符(我假设 json_encode 在这里不以空格结尾,base 64 再次添加相同的开销

好的,所以我在这里有点累了,但你可以看到它至少两次使用 base64 编码扩展明文。最后,这是一个增加了大量开销的方案;他们本可以使用 base64(IV|ciphertext|mac)严重减少开销。

注意事项

  • 如果您现在不是 4.2,我会认真考虑升级到最新版本,因为 4.2 修复了很多安全问题
  • 示例代码中使用了字符串作为key,不知道用bytes代替是否方便;
  • 文档确实针对 Rijndael 默认值以外的 key 大小发出警告,但忘记提及字符串编码问题;
  • 总是执行填充,即使使用 CTR 模式,这也违背了目的;
  • Laravel 填充使用 PKCS#7 填充,但由于序列化似乎总是以 ; 结尾, 那不是真的有必要;
  • 很高兴看到将经过身份验证的加密用于数据库加密(未使用 IV,已在 4.2 中修复)。

关于php - Laravel 4 加密 : how many characters to expect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27991717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com