PHP如何处理三重加密的32字节密钥

Posted

技术标签:

【中文标题】PHP如何处理三重加密的32字节密钥【英文标题】:How does PHP handle 32 byte keys for tripledes encryption 【发布时间】:2014-02-11 16:39:03 【问题描述】:

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

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

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

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

我需要对密钥做什么,以便 PHP 产生与 Java 相同的加密结果?

【问题讨论】:

您必须找出Java中的密钥派生函数是什么。 TripleDES 接受大小最大为 168 位(21 字节)的密钥。那个 32 个字符的密钥看起来实际上是 128 位以十六进制编码的数据。 【参考方案1】:

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

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

【讨论】:

除了当之无愧的 mcrypt 库之外,我的回答中缺少什么吗?需要澄清吗?

以上是关于PHP如何处理三重加密的32字节密钥的主要内容,如果未能解决你的问题,请参考以下文章

做接口测试时遇到接口加密了该如何处理

做接口测试时遇到接口加密了该如何处理

如何处理多个 ssh 密钥

当我用尽 bigint 生成的密钥时会发生啥?如何处理?

当我用尽 bigint 生成的密钥时会发生啥?如何处理?

如何处理相同的哈希与相同的密钥?