【发布时间】:2011-07-02 05:48:03
【问题描述】:
这是一个理论,它不仅适用于 PHP,而且可能适用于更多语言。
假设我使用mcrypt 库和AES-256 密码加密了一个字符串。加密后的字符串现在看起来类似于þøÆ{”ò(ü´îÚÜÇW¹ËŸK¯L‘rø?ª¶!JF£º+Œ’Ú'‚。
如果加密密钥在解密和加密事件之间发生变化,那么解密的结果显然毫无价值。
由于加密字符串至少对我来说包含随机字符,因此对其进行某种测试以确保它处于加密/解密状态并不容易。
我花了一些时间思考。 如何测试字符串是否已正确解密?
如果我在加密之前给原始字符串附加一个小前缀,然后在解密时删除这个前缀会怎样。如果没有找到这个前缀,就可以说解密失败了。
这是处理这个问题的合适方法吗?
【问题讨论】:
-
您可以包含明文的哈希值(例如 sha-1),而不是简单的前缀。这样您就可以获得完整性检查作为奖励。
-
@Code 这是个好主意。哈希必须后跟一个定义的字符来标记边界
-
关于你的方法,如果你能找到一个字符串 $a 使得对于每个可能的字符串 $b,$a 的编码是安全的。 $b 永远不会以 $a 开头。
-
为什么需要一个已定义的字符?典型的散列具有恒定的大小。例如,一个 sha-1 哈希只有 20 个字节。
-
@CodeInChaos 如果加密的字符串相当大,甚至是文件/文档,那是个好主意。我怀疑在小字符串上实现是个好主意
标签: php encryption aes mcrypt