【发布时间】:2010-08-06 07:38:21
【问题描述】:
我正在尝试在 PHP 中实现 Funambol 移动同步服务器中使用的密码加密算法,但由于我来自非 Java 背景,所以我遇到了困难。代码本身看起来很简单:
encryptionKey = "Omnia Gallia in tres partes divida est";
byte[] newValue = new byte[24];
System.arraycopy(encryptionKey, 0, newValue, 0, 24);
encryptionKey = newValue;
KeySpec keySpec = new DESedeKeySpec(encryptionKey);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESEde");
Cipher cipher = Cipher.getInstance("DESEde");
SecretKey key = keyFactory.generateSecret(keySpec);
cipher.init(Cipher.ENCRYPT_MODE, key);
cipherBytes = cipher.doFinal(plainBytes);
我不一定要寻找一个完整的解决方案,而是我可以在 PHP 方面使用的指针。 mcrypt 可以处理这个问题吗?我还需要什么?这在 PHP 中是否可行?
对于好奇的人:我正在为 Funambol 服务器构建一个界面,我希望能够使用 PHP 从界面本身添加用户。
【问题讨论】:
-
看起来很简单,因为算法使用了一些框架。第一步是查看是否存在与 Triple DES 等效的 PHP(请参阅 en.wikipedia.org/wiki/Triple_DES )。如果可能的话,你可以考虑在Java端添加一些可以直接通过PHP调用的外部接口。
-
我相信 Julius Caesar 的引用应该是
divisa而不是divida- 无论如何它是:Gallia est omnis divisa in partes tresfrom thelatinlibrary.com/caesar/gall1.shtml ---- 虽然使用不正确的版本可能会更棘手:p -
这并不重要,但使用 System.arraycopy 获取字符串的字节表示时,当您获得 unicode 中代码点 255 以上的字符时,很可能会中断。您可能希望改为使用 String.getBytes()。