gpt4 book ai didi

php - 我可以向用户提供一个加密的字符串并确保它在 1-2 小时内是安全的吗

转载 作者:IT王子 更新时间:2023-10-29 00:05:12 24 4
gpt4 key购买 nike

我们正在制作一种简单的游戏,其中:

  • 用户收到作为加密字符串下一个播放次数 在他们播放之前
  • 他们玩后,加密密码提供给他们以检查播放号码是否正确。
  • 每个加密字符串仅在1-2小时内有效,播放次数、验证字符串和加密字符串在该时间后重新生成
  • 加密的字符串包含验证码(5 个字符),因此用户和我们都可以确保解密过程成功

加密字符示例(QQ9LU为播放前提供给用户的随机验证码):

Next Play Number: 8 - Verify String: QQ9LU

示例加密字符串(播放前提供给用户):

NXRykKOv3B6kuu4Ke3svp7HH3enNiqIZrJSXJiF54QkHHjtXgqpUXxyuP7YUNICeFLg==

示例密码(播放后提供):

请注意这是为每次加密随机生成的

FA00RDjA77hlOzcOzH6kuGcc29CyM7Hw

我们使用 CodeIgniter 2.2.2 加密类来加密/解密字符串

加密方法信息:

  • 使用的函数:$this->encrypt->encode($msg, $pass); 每次随机传递
  • 密码是 CodeIgniter 2 默认的 MCRYPT_RIJNDAEL_256
  • Mcrypt 模式是 MCRYPT_MODE_CBC

我的问题是:

  1. 我能相信用户在 1-2 小时内无法破解加密字符串(并且在获得密码之前知道播放次数)吗(除了走运)

  2. 随机验证码Verify String: T3YH4放在那里好还是不好?是否影响安全? (这是为了验证解密结果是否成功,我们添加它是因为每个字符串中唯一的变量是单个数字,例如只有数字 8 变为 7,所以我们想在字符串中添加更多可变字符以可能有一个更好的安全性)

感谢任何其他建议

最佳答案

简短的回答:

  1. 从技术角度来看,您正在做的事情是不安全的,尽管这可能只需要 2 小时的时间范围。
  2. 您在此处尝试执行的操作称为“消息身份验证”,但不应该这样做,这反过来又会影响安全性。您应该改用 HMAC。

我的建议是尽快升级到 CodeIgniter 3(CI2 将在几个月内停止接收甚至安全更新),并改用其新的加密库。这将使它安全多年,而不是几小时。

长答案:

加密库应该为你做加密认证,但不幸的是CI_Encrypt类本身写得不好并且缺少很多功能(比如认证),这就是为什么它被弃用并被 CodeIgniter 3 中的新 (CI_Encryption) 库取代的原因。

解释这里的所有缺陷将是一项艰巨的任务,所以我宁愿将您链接到 external article (not self-promoting, don't worry) ,如果您对低级细节感兴趣,它会做得很好。

但是,无论您使用哪个库,都必须注意一件事 - 密码与加密 key 不同。

密码具有不同的长度并且由人类使用,这意味着它们必须是人类可读的,而这又将它们限制为特定的一组字符。

另一方面,加密 key 具有固定长度(每个加密算法都设计为使用特定的 key 长度;对于 Rijndael-256,它是 32 个字节,您似乎匹配)并且不限于人类可读的字符(这意味着更多的熵,因此更安全)——它们代表原始二进制数据。

图书馆可以控制(因此自动完成)任何其他事情,但如果您传递的是密码而不是 key - 图书馆将使用密码,所以您应该注意这一点。

关于php - 我可以向用户提供一个加密的字符串并确保它在 1-2 小时内是安全的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30154105/

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