Grails数据源加密错误

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

我正在尝试加密DataSource.groovy文件中的数据库密码。
我遵循以下指示:

我已经编写了一个用于编码/解码的类,当我在开发机器上调试时,它工作得很好。但是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,这两个环境中的值是相同的,并且它们指向同一个数据库。