舵图:对字符串

时间:2019-03-01 18:45:47

标签: kubernetes-helm

我正在尝试建立头盔图。有一个值(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。

1 个答案:

答案 0 :(得分:0)

我怀疑您需要the core text/template functionalitySprig中都没有的几件东西,结果证明这是不可能的。

我看到的两个主要缺点:

  • splitList "" .password生成一个单字符字符串列表。这很有用,但是无法将其进一步简化为Unicode代码点值的列表。注意atoi $v将尝试将字符串读取为数字;它会理解字符串"17",但不知道"a"应该变成97。

  • come from Sprig唯一可用的算术函数,但不包含任何按位运算。

如果您只处理可打印的ASCII,您可以做的一件事是从每个字符到其XOR建立静态映射:

{{- $xorMap := dict "!" "~" "~" "!"
                    "\"" "{" "{" "\""
                    "#" "|" "|" "#" ... -}}

然后在您的range循环中,将每个字符index放入此查找映射。如果您还有另一种方法来验证混淆,则值得仔细检查(例如,通过helm template)。

如果您已经具有可以执行此操作的shell脚本,则配置Docker容器可能会更容易,该容器最终将在启动时运行以执行此操作。