我继承了使用Java Simplified Encryption(Jasypt)Java Library的代码。特别是只有 StandardPBEStringEncryptor类。
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
使用 StandardPBEStringEncryptor类是否存在安全隐患?有更安全的替代方案吗?
答案 0 :(得分:1)
使用StandardPBEStringEncryptor类是否存在任何安全风险
Jasypt实际上并没有实现任何安全或加密算法,而是委托给其他加密提供商。因此,在您实际使用的库中,没有任何其他安全风险已经存在。我认为默认情况下,Jasypt使用Java附带的JCE(Java Cryptography Extension)。
是否有更安全的替代方案?
Jasypt API可以使用其他安全提供程序,包括Bouncy Castle。 Bouncy Castle有更多JCE附带的算法。
中所述StandardPBEStringEncryptor myFirstEncryptor = new StandardPBEStringEncryptor();
myFirstEncryptor.setProvider(new BouncyCastleProvider());
myFirstEncryptor.setAlgorithm("PBEWITHSHA256AND128BITAES-CBC-BC");
myFirstEncryptor.setPassword(myPassword);
String myFirstEncryptedText = myFirstEncryptor.encrypt(myText);
答案 1 :(得分:0)
Jasypt的目的是封装使用加密技术的安全最佳实践,以便不熟悉加密的人在部署此类技术时可以相当安全。它可以为您选择CBC vs ECB和68bit vs 128bit vs 256 bit以及其他较低级别的细节。有时这些低级别细节的错误选择会影响您的应用程序的安全性(读取某人可以破解它)。 Jaspyt通过为您提供最佳安全选项,帮助您最大限度地减少这种可能性。所以在某种程度上它比直接使用JCE或Bouncy Castle的风险要小。
在他们的常见问题解答中,他们直接解决了您的问题:
http://www.jasypt.org/faq.html#does-jasypt-implement-algorithms
答案 2 :(得分:0)
如果文档文章How to encrypt user passwords是可以接受的代码,则可能是可接受的,但不是最新的当前最佳实践,因为它建议迭代SHA1或MD5。虽然您可以自己将算法更改为PBKDF2或bcrypt,但至少有一些迹象表明其他部分也可能不是最新的。
这是为什么SHA1不是一个好选择的思想实验。什么是MD5和SHA-X优化?绝对不是慢,这正是你想要的密码散列算法。你不希望它被迅速破解,你希望它需要时间。 Why You Shouldn't be using SHA1 or MD5 to Store Passwords
那就是说你真的不想自己滚动。找到一个好的图书馆或专家可以让你免于一些使用加密很容易犯的错误。你最好使用该库而不是自己动手。