将十六进制字符串哈希转换为 base64

Convert hex string hash to base64

我有一个明文密码“welcome2022”。

预期的 SHA1 哈希为 wjC4KfO5XfMIRhi45M/VA/0i8NA=

但是,sql 的 SHA1 散列方法正在生成十六进制字符串格式的 SHA1 散列,即 C230B829F3B95DF3084618B8E4CFD503FD22F0D0

我打算将上面的十六进制字符串转换为base64编码的哈希值wjC4KfO5XfMIRhi45M/VA/0i8NA=

下面是groovy代码供大家参考。

    def cleartext = SecurityUtil.decrypt(password) //Decrypts the value of a GuardedString.    
   def password_bytes = [0, 0, 0, 0, 0] as byte[]
    password_bytes = SecurityUtil.charsToBytes(cleartext.toCharArray())
    def password2 = SecurityUtil.computeBase64SHA1Hash(password_bytes) //Computes the base 64 encoded SHA1 hash of the input.

然后运行下面的sql查询,

sql.eachRow("SELECT id FROM users WHERE userName = ? AND password =CONCAT('{SHA1}', ?)", [username, password2]) {
....
}

执行此 groovy 脚本时,日志未显示任何错误。

我不确定我写的代码在语法上是否正确。

因此此函数将为您提供给定密码的 base64 编码 SHA-1 哈希值:

def sha64(String password) {
    password.digest('SHA-1').decodeHex().encodeBase64()
}

如果你这样做:

println sha64('welcome2022')

它打印

wjC4KfO5XfMIRhi45M/VA/0i8NA=