Недавно мне нужно было пройти JSON между простым приложением Java Script и кусочком Python Code, используемым в конфигурации сборки TeamCity. То, что JSON содержит пароли, а Teamcity, к сожалению, показывать его в интерфейсе.
Я попытался играть с командыми городскими паролем, но это довольно ограничено и не может быть передано между сборками в цепочке.
Я реализовал очень простое шифрование с обеих сторон (JS и Python), и я шифрую пароль в JSON. Таким образом, Team City показывает только зашифрованный пароль, у меня могут быть все пароли, которые мне нужны в моем JSON.
Я выбираю XOR шифр в качестве моего метода шифрования. Я не мог добавить какие-либо библиотеки Crypto в мой код Python, и XOR является Super легко в реализации на обоих языках. I BASE64 кодирует результат шифрования, чтобы сделать его более приятной строкой.
Вот моя реализация для JS
function encode(key, data) { return btoa(xorEncrypt(key, data)); } function xorEncrypt(key, data) { return _.map(data, function(c, i) { return c.charCodeAt(0) ^ keyCharAt(key, i); }); } function keyCharAt(key, i) { return key.charCodeAt( Math.floor(i % key.length) ); }
Я использую underscore.js здесь.
Вот моя реализация для Python
import base64 import math def key_char_at(key, i): return key[math.floor(i % len(key))] def decode(key, password): base64_bytes = password.encode('ascii') password_bytes = base64.b64decode(base64_bytes) decodedPassword = password_bytes.decode('ascii') password_array = decodedPassword.split(",") finalPassword = [] for i in range(len(password_array)): finalPassword.append(chr(int(password_array[i]) ^ ord(key_char_at(key, i)))) return ''.join(finalPassword)
Оригинал: “https://dev.to/pavel_polivka/simple-encryption-for-hiding-passwords-971”