java - PHP 如何处理三元组加密的 32 字节 key

标签 java php encryption tripledes language-interoperability

向大家致歉 - 加密方面的新手 - 在谷歌上搜索了好几天,终于直接问了。

我需要使用 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/

相关文章:

java - Enterprise Architect 使用 Java 编写脚本 - 创建和修改链接文档

java - 类、对象、实体 : What's the difference?

java - 如何按列专业将一维数组转换为二维数组

在 Windows 中编写的 PHP 无法运行

python - 使用 python 和 nodejs 加密和解密

java - 在java中比较两个列表

PHP5 框架 : Autoloading and Opcode Caching

php - 使用 Group_by 获取 CodeIgniter 中的最新记录

database - 数据库级加密中的数据泄漏

javascript - 如何保护聊天消息免受中间人攻击(PHP、JavaScript)