Grails数据源加密错误
我正在尝试加密DataSource.groovy文件中的数据库密码。Grails数据源加密错误,grails,encryption,groovy,Grails,Encryption,Groovy,我正在尝试加密DataSource.groovy文件中的数据库密码。 我遵循以下指示: 我已经编写了一个用于编码/解码的类,当我在开发机器上调试时,它工作得很好。但是web服务器(使用相同的数据库和相同的url、用户名、密码)在我部署它时给了我以下错误: ERROR] 2013-12-06 08:52:15,367 (StackTrace:sanitize:260) | Sanitizing stacktrace: java.lang.RuntimeException: bad characte
我遵循以下指示: 我已经编写了一个用于编码/解码的类,当我在开发机器上调试时,它工作得很好。但是web服务器(使用相同的数据库和相同的url、用户名、密码)在我部署它时给了我以下错误:
ERROR] 2013-12-06 08:52:15,367 (StackTrace:sanitize:260) | Sanitizing stacktrace:
java.lang.RuntimeException: bad character in base64 value
at org.codehaus.groovy.runtime.EncodingGroovyMethods.decodeBase64(EncodingGroovyMethods.java:177)
编码类:
import java.security.*
import javax.crypto.*
import javax.crypto.spec.*
public class Des {
static encode = { String target ->
def cipher = getCipher(Cipher.ENCRYPT_MODE)
return cipher.doFinal(target.bytes).encodeBase64()
}
static decode = { String target ->
println "DECODE TARGET :::: " + target
def cipher = getCipher(Cipher.DECRYPT_MODE)
def b64Char = target.decodeBase64()
println "BASE64 CHAR :::: " + b64Char
def ret = cipher.doFinal(b64Char)
println "DECODE VALUE :::" + ret
return ret
}
private static getCipher(mode) {
def keySpec = new DESKeySpec(getKeySecretKey())
def cipher = Cipher.getInstance("DES")
def keyFactory = SecretKeyFactory.getInstance("DES")
cipher.init(mode, keyFactory.generateSecret(keySpec))
return cipher
}
private static getKeySecretKey() {
"MySecret1234".getBytes("UTF-8")
}
static void main(args) {
println encode("TheP4ssword")
}
}
DataSource.groovy代码段
dashboard_dev {
dataSource {
url = "jdbc:jtds:sqlserver://server:1433;databaseName=dbName"
username = "UserDashboard"
password=Des.decode("j123456789nYmRLN4ziyJw==")
// Not needed -- passwordEncryptionCodec = com.rdc.encryption.Des
}
}
看起来问题出在
def b64Char=target.decodeBase64()
,但我看不出有什么问题。。。“j123456789nYmRLN4ziyJw==”
值在开发和生产中是否完全相同?可能值得将encode
的最后一行更改为return cipher.doFinal(target.bytes).encodeBase64().toString()
,因为它当前返回一个可写的(因此解码(encode)(“thepsword”)
不起作用)当我一步一步通过密码时,密码被正确编码和解码@tim_yates,这两个环境中的值是相同的,并且它们指向同一个数据库。