Двухэтапный хэш в шаблоне Helm - PullRequest
0 голосов
/ 14 марта 2019

Я хотел бы реализовать следующий алгоритм в шаблоне 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, чтобы избежать создания контейнера для генерации хеша?

...