gpt4 book ai didi

java - 如何在 PHP 中解密 Jasypt 加密的字符串?

转载 作者:行者123 更新时间:2023-12-01 07:41:21 34 4
gpt4 key购买 nike

这可能是一个不可能的问题,但我正在将遗留系统从 Java 迁移到 PHP,并且我需要能够解密 PHP 中使用 Jasypt 加密的字符串。

According to the documentation ,Jasypt使用以下算法:

  • 将随机盐(我认为这与密码的初始化 vector 相同)附加到要加密的数据
  • 重复加密 1000 次
  • 将未加密的 salt/IV 添加到加密的字符串
  • 对整个字符串进行 Base64 编码

旧应用程序使用 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");
}

最佳答案

您不理解“PBEWithMD5AndDES”的含义。

PBEWithMD5AndDES 表示加密密码(字符串)使用 MD5 进行哈希处理,以获得用作 DES 算法的加密 key 输入的字节数组以及要加密的文本。

因此,无法使用 DES 解密以获得 MD5 哈希值。这是没有意义的。您只需要使用完全相同的算法来解密加密的数据,但是是在 PHP 实现中。

顺便说一句,“PBEWithMD5AndDES”不是“jasypt 算法”。它是一种 Java 加密扩展 (JCE) 算法。 Jasypt 本身不实现任何算法。

希望这有帮助。

关于java - 如何在 PHP 中解密 Jasypt 加密的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503720/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com