头盔图:字符串上的XOR

问题描述 投票:1回答:1

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

kubernetes-helm
1个回答
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容器以在启动时执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.