我需要为我的应用程序的用户(不是密码,我使用的是bcrypt)加密一些详细信息,我需要访问未来,所以我需要能够解密这些细节,做到这一点,我在我的春季启动应用程序中有以下类,我的问题是如何保护用于加密文本的密码?如何确保TextEncryptor在弹簧启动时使用的密码
import org.springframework.security.crypto.encrypt.Encryptors;
import org.springframework.security.crypto.encrypt.TextEncryptor;
public class Crypto
{
final static String password = "How_to_Secure_This_Password?";
public static String encrypt(String textToEncrypt, String salt)
{
if (textToEncrypt != null && !textToEncrypt.isEmpty())
{
TextEncryptor encryptor = Encryptors.text(password, salt);
String encryptedText = encryptor.encrypt(textToEncrypt);
return encryptedText;
}
return null;
}
public static String decrypt(String encryptedText, String salt)
{
if(encryptedText != null && !encryptedText.isEmpty())
{
TextEncryptor decryptor = Encryptors.text(password, salt);
String decryptedText = decryptor.decrypt(encryptedText);
return decryptedText;
}
return null;
}
}
从我的研究,到目前为止,我可以建议以下解决方案:
1-获取密码从属性文件并使用Spring配置云计算的加密/解密功能的属性文件(值前缀与字符串{cipher}),一个好的起点是here。我不喜欢这个解决方案,因为我不需要客户端/服务器配置结构,并且我不太喜欢仅仅为了一个功能而使用它,我相信Spring框架应该具有类似的功能。
2-使用Jasypt库,或从here对其弹簧启动的“非官方”支持。再次,不知道问题是否在属性文件中加密此密码的问题?
3-使用,看起来建造类似的东西是什么,我需要在这里(API密钥,秘密等...),但它是太多的开销来构建,维护和整合Vault ......
我的观点是,如果攻击者能够访问我的数据库机器,那么他很可能会访问应用程序机器,这意味着他可能能够对该类进行反向工程并能够解密所有我想要保护的细节!我在这里感到困惑,这里的最佳实践和行业标准是什么?