我有一个grails应用程序,我希望在将数据存储到数据库之前保护数据。 Hibernate grails和jasypt使用EncryptedStringType提供了这种可能性。但这需要一把钥匙。我可以在哪里存储这个键??请参考此示例:
encryptor.setPassword("some password here");
encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
String myText = "358904051493345";
System.out.println(myText);
String encryptedText = encryptor.encrypt(myText);
System.out.println(encryptedText);
String decriptedText =
encryptor.decrypt(encryptedText);
System.out.println(decriptedText);
答案 0 :(得分:2)
保留配置值(例如此密钥)的最佳位置在应用程序配置Config.groovy
中。使用您的示例,您可能会遇到以下情况:
// Config.groovy
...
jasyptKey = 'myKeyGoesHere'
...
更进一步,您应该考虑使用外部配置文件(或属性文件)来存储敏感的生产信息,例如此加密密钥。 Grails documentation提供了有关外部化配置的更多信息。
然后在您的域/服务/控制器中,您可以使用依赖注入来访问grailsApplication
:
// example service
class MyService {
def grailsApplication
...
def serviceMethod() {
...
encryptor.setPassword(grailsApplication.config.jasyptKey)
...
}
...
}
在非常罕见的情况下,您需要从不支持依赖注入的Grails / Spring工件外部访问此配置,您可以使用Holders
代替:
// some class in /src/
import grails.util.Holders
...
encryptor.setPassword(Holders.config.jasyptKey)
...