Java 用DES和密码加密

Java 用DES和密码加密,java,cryptography,des,encryption,Java,Cryptography,Des,Encryption,我正在使用我发现的使用DES加密的代码。我正在将此值发送给第三方服务,但似乎不起作用 代码中的问题给定代码、salt和迭代用作参数,以创建并使用参数规范初始化密码: // Prepare the parameter to the ciphers AlgorithmParameterSpec paramSpec = new PBEParameterSpec( salt, iterationCount ); // Create the ciphers ecipher.init(Cipher.ENC

我正在使用我发现的使用DES加密的代码。我正在将此值发送给第三方服务,但似乎不起作用

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

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

我遗漏了什么?

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


一般来说,为玩具实现以外的任何东西编写自己的加密函数被认为是不好的做法。编写安全、正确的密码学库有时会很棘手。考虑使用java平台SE 6的一部分。

< p>问题是,你知道加密算法(DES),但不知道密钥生成算法。从密码中提取密钥有很多可能性。示例中的PBEParameterSpec使用PKCS#5算法从密码派生密钥。这是一个非常好的算法,但通常人们自己会尝试开发一个简单的算法——例如,只是对密码进行哈希运算,或者使用一些更糟糕的方法。
检测所使用的方法并不容易。如果你有一个正在使用第三方服务的应用程序,你可以尝试对它进行反向工程,看看它是如何工作的。

FWIW,DES是不安全的,不应该在你希望有人严重攻击你的密码的情况下使用。如果这是与给定服务进行通信的最安全的方式,那么,让我们希望您对任何具有强大计算能力的人都不感兴趣。@David。谢谢你的评论。是的,我们知道这一点。这将用于局域网。盐呢?至于函数,我指出的代码使用JCA.Triple DES技术上不会加密三次。它应用DES算法三次加密一个块,先加密,再解密,然后再加密。@Joel盐呢?我们应该用什么?@Joel为我写了一篇关于算法的文章,我自己从来没有读过。谢谢如果用盐的话,应该给你。如果没有盐,您可以尝试不使用盐(空字符串)。如果这个系统是安全的,那么一定要给你一个salt(或关于如何生成salt的说明)。