2010-12-03 146 views
2

我正在使用我发现使用DES进行加密的代码here。我将这个值发送给第三方servce,但似乎不起作用。使用DES和密码进行加密

问题中给出的代码代码,盐和迭代作为参数来创建与参数规格初始化密码:

// 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,当然还有秘密密码。

我错过了什么?

+2

FWIW,DES不安全,不应在您期望任何人严重攻击您的密码的情况下使用。如果它是与特定服务进行通信的最安全的方式,那么让我们希望你对任何拥有大量计算能力的人都不感兴趣。 – 2010-12-03 21:45:55

+0

@David。感谢您的评论。 Yeap,我们知道这一点。这将在局域网中使用。 – OscarRyz 2010-12-03 21:52:45

回答

2

“DES”本身只是一次迭代。它的后继,“三重DES”加密每个数据块三次执行算法的三次迭代。如果您希望仅使用“DES”执行加密,则一次迭代应该是正确的。

一般情况下,它被认为是不好的做法,编写自己的加密功能比玩具实现的任何其他。为密码编写安全,正确的库有时可能会非常棘手。考虑使用Java Platform SE 6的一部分Java Cryptography Architecture

1

您的问题是您知道加密算法(DES),但不知道密钥生成算法。为了从密码中获得密钥,有很多可能性。您示例中的PBEParameterSpec使用PKCS#5算法从密码派生密钥。这是一个非常好的算法,但通常人们试图自己开发一个简单的算法 - 例如只是哈希密码或一些更糟糕的方法。 检测使用什么方法并不容易。如果你有一个使用第三方服务的工作应用,你可以尝试对其进行反向工程,以了解它是如何工作的。