我需要爲我的應用程序的用戶(不是密碼,我使用的是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 ......
我的觀點是,如果攻擊者能夠訪問我的數據庫機器,那麼他很可能會訪問應用程序機器,這意味着他可能能夠對該類進行反向工程並能夠解密所有我想要保護的細節!我在這裏感到困惑,這裏的最佳實踐和行業標準是什麼?