我可以使用jasypt存储加密密钥

时间:2014-10-15 15:51:20

标签: java hibernate grails encryption jasypt

我有一个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);

1 个答案:

答案 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)
...