Недавно мне нужно было пройти 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”