我正在尝试建立一个头盔图。有一个值(db.password)有时应该作为纯文本传递,其他时候作为XOR + Base64传递。
我不想设置两个值,一个用于普通,另一个用于编码密码,所以我试图用代码模板函数来进行编码。从sprigs already has base64 encoding开始,我认为我所要做的只是一个XOR函数......我已经有了一个shell脚本,将它移植到我的模板有多难?
我正在尝试遍历字符串的每个字符并将其环化:
{{- define "encrypt.decrypt" -}}
{{- $key := 95 -}}
{{- range $k,$v := splitList "" .password }}
{{- printf "%s" (add (atoi (quote $v)) $key | toString) -}}
{{- end }}
{{- end }}
然后我会这样称呼它:
{{include "encrypt.decrypt" (dict "Values" .Values "password" .Values.db.password) }}
但它所做的一切都是印刷品很多次。将非数字字符转换为int无效并默认为0。
atoi (quote $v))
刚刚回归0。
我怀疑你需要一些不在the core text/template functionality或Sprig中的碎片,结果证明这是不合理的。
我看到的两大缺点:
splitList "" .password
生成一个单字符串列表。这很有用,但没有办法进一步将其减少为Unicode代码点值列表。值得注意的是,atoi $v
会尝试将字符串作为数字读取;它会理解字符串"17"
但不知道"a"
应该变成97。如果您只处理可打印的ASCII,那么您可以做的一件事就是从每个角色到其XOR构建一个静态地图:
{{- $xorMap := dict "!" "~" "~" "!"
"\"" "{" "{" "\""
"#" "|" "|" "#" ... -}}
然后在你的range
循环内,index
每个字符进入此查找映射。如果你有另一种方法来验证混淆,那么值得仔细检查(例如,通过helm template
)。
如果您已经有一个可以执行此操作的shell脚本,则可能更容易配置最终运行的Docker容器以在启动时执行此操作。