【发布时间】:2021-03-26 05:49:18
【问题描述】:
我需要使用使用 PBEWithMD5AndTripleDES 算法的 org.jasypt.util.text.StrongTextEncryptor 解密在 Java 中生成的字符串。我想我在这里找到了源代码:http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java
它有一些关于算法的信息:
- 创建随机盐并将其分成两半。如果两半相同,则反转其中之一。
- 将密码与每一半连接起来。
- 使用 c 次迭代来消化每个串联,其中 c 是迭代计数。将每个摘要轮的输出与 密码,并将结果用作下一个摘要的输入 手术。摘要算法为 MD5。
- 经过 c 次迭代,使用 2 个结果摘要,如下所示:第一个摘要的 16 个字节和第二个摘要的第一个 8 个字节
形成三重 DES 密钥,以及第二个摘要形式的最后 8 个字节 IV.
Java 中的代码看起来非常简单。这就是密钥的解密方式。
StrongTextEncryptor textEncryptor = new StrongTextEncryptor();
textEncryptor.setPassword(key1);
String result = textEncryptor.decrypt(key2);
这是我生成的一个示例:
key1=17EXGCnC
key2=7bALjokBDuxopB+Z37DwiTX/jg3/pjUoKW4q25uzd34=
result=-1,-1
谁能指导我如何实现解密代码?
这是Java中使用的包:https://mvnrepository.com/artifact/com.melloware/jasypt/1.9.4
【问题讨论】:
-
代码令人困惑,因为您确实拥有密钥和加密数据。 Key2 是加密数据。要解密,您应该有一个密钥和加密的消息。您的解密方法只有一个参数。
-
是的,我知道,但我不知道该怎么做。也许我应该写 c# 代码来表明我已经开始研究它,但正如你所说的还没有走远。
-
见下文。你需要三样东西 1) 公钥 2) 私钥 3) 加密数据。 docs.microsoft.com/en-us/dotnet/api/…
-
@jdweng:你只是在混淆事情。这不是公钥(非对称)加密的实例,因此不涉及公钥和私钥。
-
密文只能在我的机器上用melloware fork的Jasypt版本解密,original versions不行。似乎实现方式不同。
标签: java c# encryption .net-core