2014-02-11 75 views
0

道歉 - 所有 - 加密的新手 - 一直使用Google搜索几天,最后直接询问。PHP如何处理三字节加密的32字节密钥

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

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

在PHP中,当相同的密钥通过mcrypt的尝试了TripleDes的,欧洲央行的函数调用,还有一个关键的长度错误,因为该系统预计24个字符的最大值。

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

+2

你必须找出Java中的密钥派生函数是什么。 TripleDES接受最多168位(21字节)的密钥。这32个字符的键看起来实际上是以十六进制编码的128位数据。 – NullUserException

回答

0

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

三字节DES不支持32字节密钥。但是,如果您使用PHP的可怕mcrypt库,则会将密钥切割为可用的最高密钥大小。因此,PHP并不是一个快速失败的情况,而是让用户在挫折中脱颖而出。

+0

除了当之无愧的戳到mcrypt libs,我的答案中缺少的东西?任何澄清需要? –