这可能是一个不可能的问题,但我正在将遗留系统从Java迁移到PHP,我需要能够解密用PHP中的Jasypt加密的字符串。
According to the documentation,Jasypt使用以下算法:
遗留应用程序使用PBEWithMD5AndDES
Jasypt算法。我完全清楚MD5不是为解密而设计的,这不是我想要做的。
我只想对字符串进行DES解密,这样我剩下的就是MD5哈希。我似乎无法获得除PHP之外的二进制垃圾。我错过了什么?
<?php
#jasypt.algorithm=PBEWithMD5AndDES
$secret = 'secret-password';
$encrypted = 'xh/roK2diJPDfZGlT9DlwuG2TsS7t7F+';
$cipher = MCRYPT_DES;
$modes = array(
'ecb' => MCRYPT_MODE_ECB,
'cbc' => MCRYPT_MODE_CBC,
'cfb' => MCRYPT_MODE_CFB,
'ofb' => MCRYPT_MODE_OFB,
'nofb' => MCRYPT_MODE_NOFB,
'stream' => MCRYPT_MODE_STREAM,
);
foreach($modes as $mode => $mc) {
$iv_len = 0; //mcrypt_get_iv_size($cipher, $mode);
$password = base64_decode($encrypted);
$salt = substr($password, 0, $iv_len);
$data = substr($password, $iv_len);
for($i = 0; $i < 1000; $i++) {
$data = @mcrypt_decrypt($cipher, $secret, $data, $mode, $salt);
}
var_dump("$mode: $i: $data");
}
答案 0 :(得分:5)
您不理解“PBEWithMD5AndDES”的含义。
PBEWithMD5AndDES表示使用MD5对加密密码(字符串)进行哈希处理,以获得用作DES算法的加密密钥输入的字节数组以及要加密的文本。
因此,为了获得MD5哈希,无法使用DES进行解密。这是没有意义的。您只需使用完全相同的算法解密该加密数据,但需要在PHP实现中解密。
顺便说一句,“PBEWithMD5AndDES”不是“jasypt算法”。它是Java密码术扩展(JCE)算法。 Jasypt本身并没有实现任何算法。
希望这有帮助。
答案 1 :(得分:1)
Php for Java简化加密:https://github.com/kevwis/Phpsypt
答案 2 :(得分:1)
您缺少生成密钥。
我必须为我的客户做同样的事情,并写了几行代码来帮助解决问题:https://github.com/KevinBusse/PBEWithMD5AndDES