Я хотел бы реализовать следующий алгоритм в шаблоне Helm:
package main
import (
"crypto/sha256"
"fmt"
"encoding/base64"
)
func main() {
passw := "testpassw"
salt := []byte("testsalt")
encSalt := base64.StdEncoding.EncodeToString(salt)
hasharg := fmt.Sprintf("%s%s", salt, passw)
hash1 := sha256.Sum256([]byte(hasharg))
hash2 := sha256.Sum256(hash1[:])
encHash2 := base64.StdEncoding.EncodeToString(hash2[:])
fmt.Printf("%s %s", encHash2, encSalt)
}
https://play.golang.org/p/eptHXAXIRv2
Это должно привести к QAtppodNjcm3KPEyHTO4ZBSOrsrzbC+zLUEVJ43wQkQ= dGVzdHNhbHQ=
как результат.
То же самое в Bash:
$ SALT="testsalt"
$ PASSW="testpassw"
$ encHash=`echo -n $SALT$PASSW | sha256sum | cut -d" " -f1 | xxd -r -p | sha256sum | cut -d" " -f1 | xxd -r -p | base64`
$ encSalt=`echo -n "testsalt" | base64`
$ printf "%s %s" $encHash $encSalt
Первый наивный подход к реализации этого в Хелме:
{{- $passw := "testpassw" -}}
{{- $salt := "testsalt" -}}
{{- $hasharg := printf "%s%s" $salt $passw -}}
{{- $encSalt := $salt | b64enc -}}
{{- $hash1 := $hasharg | sha256sum -}}
{{- $hash2 := $hash1 | sha256sum -}}
{{- $encHash2 := $hash2 | b64enc -}}
{{- printf "%s %s\n" $encHash2 $encSalt -}}
Этот шаблон генерирует неправильный результат, потому что sha256sum
возвращает результат в виде строки в шестнадцатеричной кодировке, а второй sha256sum
использует его, но интерпретирует аргумент как «чистую» строку. Я пытался использовать printf
с форматированием, но безуспешно.
Можно ли решить эту проблему с помощью Helm, чтобы избежать создания контейнера для генерации хеша?