向大家致歉 - 加密方面的新手 - 在谷歌上搜索了好几天,终于直接问了。
我需要使用 PHP 来加密和解密可由 Java TripleDES“DESede/ECB/NoPadding”函数读取的数据。
在 Java 中,有一个双倍长度的 32 个字符的 key ,例如“F4D5CBDF57FEEDCFA41FD6AFE7BCDFEA”被转换为字节并提供加密结果,没有任何问题。 (我没有代码。)
在 PHP 中,当通过 mcrypt 尝试使用相同的 key 进行三元组、ecb 函数调用时,会出现 key 长度错误,因为系统期望最多 24 个字符。
我需要对 key 做什么才能使 PHP 产生与 Java 相同的加密结果?
最佳答案
正如 NullUserException 假设的那样:请将 key 从十六进制转换为二进制,然后再将其用于三重 DES 密码。您的 Java 代码必须做同样的事情;在 Java 中,三重 DES key 必须具有 24 字节或 16 字节(仅更高版本的 Java 支持 16 字节,以前您必须通过将前 8 个字节复制到末尾来转换为 24 字节以创建“ABA”DES键)。
三重 DES 从不支持 32 字节 key 。然而,如果您使用 PHP 的可怕的 mcrypt 库, key 将被削减为可用的最高 key 大小。因此,PHP 宁愿让用户沮丧地抓狂,而不是快速失败的情况。
关于java - PHP 如何处理三元组加密的 32 字节 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707697/