Схемы шлема: XOR на веревочке - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь построить карту шлема.Есть значение (db.password), которое иногда должно передаваться в виде простого текста, а иногда - XOR + Base64.

Я не хочу устанавливать два значения, одно для обычного и другое для закодированного пароля,поэтому я пытался сделать код функции шаблона для кодирования.Так как sprigs уже имеет кодировку base64 , я решил, что все, что мне нужно сделать, это функция XOR ... У меня уже есть сценарий оболочки для этого, как трудно было бы перенести его на мойне так ли?

Я пытаюсь перебрать все символы строки и XORing это:

{{- 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. 0. 1013 *

atoi (quote $v)) просто возвращает 0.

1 Ответ

0 голосов
/ 02 марта 2019

Я подозреваю, что вам нужна пара частей, которые не входят ни в базовую функциональность текста / шаблона , ни Sprig , и это оказывается нереально возможным.

Два больших недостатка, которые я вижу:

  • splitList "" .password создает список односимвольных строк.Это полезно, но нет способа еще больше сократить его до списка значений кодовой точки Unicode.Примечательно, что atoi $v попытается прочитать строку как число;он бы понял строку "17", но не знает, что "a" должно стать 97.

  • Единственные доступные арифметические функции получены от Sprig , но этине включает никаких побитовых операций.

Если вы имеете дело только с печатным ASCII, вы можете сделать одну хакерскую вещь - построить статическую карту из каждого символа в его XOR:

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

Затем внутри вашего цикла range, index каждый символ в этой карте поиска.Если у вас есть другой способ проверить запутывание, стоит проверить это дважды (например, с помощью helm template).

Если у вас уже есть сценарий оболочки, который может это сделать, может быть проще настроитьКонтейнер Docker, который в конечном счете запускается для выполнения этого во время запуска.

...