암호 숨기기를 위한 간단한 암호화

5781 단어 pythonjavascript
최근에 Simple Java Script 앱과 TeamCity 빌드 구성에 사용되는 Python 코드 간에 JSON을 전달해야 했습니다. JSON에는 비밀번호가 포함되어 있었고 TeamCity는 불행히도 이를 UI에 표시했습니다.

Team City 암호 숨기기 기능을 사용해 보았지만 상당히 제한적이며 체인의 빌드 간에 전달할 수 없습니다.

양쪽(JS 및 Python)에서 매우 간단한 암호화를 구현했으며 JSON으로 비밀번호를 암호화하고 있습니다. 이 방법으로 Team City는 암호화된 암호만 표시하므로 JSON에 필요한 모든 암호를 가질 수 있습니다.

암호화 방법으로 XOR 암호를 선택합니다. 내 Python 코드에 암호화 라이브러리를 추가할 수 없었고 XOR은 두 언어 모두에서 구현하기가 매우 쉽습니다. 암호화 결과를 더 좋은 문자열로 만들기 위해 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) );
}

나는 여기에서 undescore.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)

좋은 웹페이지 즐겨찾기