我正在尝试建立头盔图。有一个值(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) }}
但是它做的很多事情是打印95次。非数字字符到int的转换无效,默认为0。
atoi (quote $v))
仅返回0。
答案 0 :(得分:0)
我怀疑您需要the core text/template functionality或Sprig中都没有的几件东西,结果证明这是不可能的。
我看到的两个主要缺点:
splitList "" .password
生成一个单字符字符串列表。这很有用,但是无法将其进一步简化为Unicode代码点值的列表。注意atoi $v
将尝试将字符串读取为数字;它会理解字符串"17"
,但不知道"a"
应该变成97。
come from Sprig唯一可用的算术函数,但不包含任何按位运算。
如果您只处理可打印的ASCII,您可以做的一件事是从每个字符到其XOR建立静态映射:
{{- $xorMap := dict "!" "~" "~" "!"
"\"" "{" "{" "\""
"#" "|" "|" "#" ... -}}
然后在您的range
循环中,将每个字符index
放入此查找映射。如果您还有另一种方法来验证混淆,则值得仔细检查(例如,通过helm template
)。
如果您已经具有可以执行此操作的shell脚本,则配置Docker容器可能会更容易,该容器最终将在启动时运行以执行此操作。