2

我正在使用在这里找到的代码使用 DES 进行加密。我将此值发送给第 3 方服务,但似乎不起作用。

代码中的问题给定代码,盐和迭代用作参数来创建使用参数规范初始化密码:

// Prepare the parameter to the ciphers
AlgorithmParameterSpec paramSpec = new PBEParameterSpec( salt, iterationCount );

// Create the ciphers
ecipher.init(Cipher.ENCRYPT_MODE, key , paramSpec);
dcipher.init(Cipher.DECRYPT_MODE, key , paramSpec);

如果我改变迭代次数,我会得到不同的结果。

我怎么知道电线的另一端正在使用什么?我从这个第三方服务中唯一知道的是,要使用的算法是 DES,当然还有密码。

我错过了什么?

4

2 回答 2

2

“DES”本身只是一次迭代。它的继任者“Triple DES”对每个数据块加密三次执行算法的三次迭代。如果您希望只使用“DES”来执行加密,那么一次迭代应该是正确的。

通常,为玩具实现以外的任何东西编写自己的加密函数被认为是不好的做法。为密码学编写安全、正确的库有时会很棘手。考虑使用Java 密码体系结构,它是 Java Platform SE 6 的一部分。

于 2010-12-03T21:50:14.010 回答
1

您的问题是您知道加密算法 (DES) 但不知道密钥生成算法。从密码中获取密钥有很多可能性。您示例中的 PBEParameterSpec 使用 PKCS#5 算法从密码中获取密钥。为此目的,这是一个非常好的算法,但人们经常尝试自己开发一个简单的算法 - 例如,只是散列密码或一些更糟糕的方法。检测使用什么方法并不容易。如果您有一个使用该 3rd 方服务的工作应用程序,您可以尝试对其进行逆向工程以查看它是如何工作的。

于 2010-12-04T18:01:57.137 回答