1

道歉所有 - 加密新手 - 谷歌搜索了好几天,终于直接问了。

我需要使用 PHP 加密和解密 Java TripleDES“DESede/ECB/NoPadding”函数可读的数据。

在 Java 中有一个双倍长度的 32 个字符的密钥,例如“F4D5CBDF57FEEDCFA41FD6AFE7BCDFEA”,它被转换为字节并提供一个没有任何问题的加密结果。(我没有代码。)

在 PHP 中,当通过 mcrypt 尝试对三元组 ecb 函数调用使用相同的密钥时,会出现密钥长度错误,因为系统要求最多 24 个字符。

我需要对密钥做什么才能使 PHP 产生与 Java 相同的加密结果?

4

1 回答 1

1

正如 NullUserException 所假设的:请在将密钥用于三重 DES 密码之前将其从十六进制转换为二进制。你的 Java 代码必须做同样的事情;在 Java 中,三重 DES 密钥必须具有 24 字节或 16 字节(仅更高版本的 Java 支持 16 字节,以前您必须通过将前 8 个字节复制到末尾来转换为 24 字节以创建“ABA”DES钥匙)。

三重 DES 从不支持 32 字节密钥。但是,如果您使用可怕的 PHP 的 mcrypt 库,则密钥将被削减到可用的最大密钥大小。因此,PHP 宁愿让他们的用户在沮丧中拔出头发,而不是快速失败的情况。

于 2014-02-12T01:06:34.353 回答