javax.crypto.Cipher有多安全?

5

我对密码学知道的足够多,足以让初学者感到困惑,并被安全专家嘲笑。所以,考虑到这一点,我想问:javax.crypto.Cipher有多安全?我知道任何东西都可以被有意愿和方法的人破解,但我仍然想知道相对详细的信息。

我之所以问是因为我想存储将通过我的Cryptor类发送的帐户名称和密码,该类将对它们进行加密,我想知道是否这样做就足够了。如果有任何可以阅读的文献,那将非常感谢。

谢谢 ~Aedon


浏览一下Jasypt文档。里面有很多好的链接。 - Jeremy
3个回答

7

Cipher是一个通用类,可应用加密/解密算法。它的安全性取决于所使用的实际加密算法(DES、三重DES、AES等)、其密钥大小以及您选择的块链接类型。


啊,我明白了。你怎么改变密钥的大小?当我尝试使用32字节密钥作为我的SercretKeySpecIvParameterSpec时,我遇到了大量的异常反馈。我查看了文档,但并不清楚。 - ahodder
DES的密钥长度为64位,但实际上只使用了56位。AES的密钥长度为128或256位。如果您要加密帐户名称和密码,建议使用CTR模式的AES-128,这样您就不会通过填充来扩展数据。CTR模式不需要像CBC模式那样进行填充。 - rossum
@rossum GCM需要填充吗?谢谢 - Diego Ramos
1
@Diego 不需要填充,因为GCM模式是流密码的一种变体,而不是块密码。 - rossum

5
如果你想要安全地存储密码,那么你的需求与简单的“安全/私密通信”完全不同。仅有一个 Cipher 是不能保护你的。在这种情况下,你需要使用以下之一: 这里提供了有关密码安全性的论点和链接。
“普通”的加密(或哈希)过程速度太快,无法阻挡严肃的攻击者。您需要人为地减慢整个过程,使得对于试图系统性攻击您的应用程序的人来说尽可能困难。单个用户在输入密码时不会注意到1毫秒和500毫秒之间的差异,但对于攻击者来说,这意味着为了破解您的方案平均需要花费的时间将增加500倍 - 因此,如果以前大约需要1个月才能找到有效密码,现在需要500个月。”

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接