티스토리 뷰

python lecture/project

[python] 해시의 무결성

burningrizen 2020. 5. 7. 23:15

1. 원본 문자열을 컨버팅 하고 그것을 A 라고 칭함

> 컨버팅: 해시(hex) > 2진수 변환

 

2. 원본 문자열 에서 순차적으로 순회하면서 알파벳일때만 바로 다음(a>b, b>c) 로 변환한다.

> 단 다음이 없는 경우는 바로 이전것으로 변환한다. (z > y)

 

3. 2번을 컨버팅 한것 하나 하나가 B 이라고 칭하고 A 와 모든 B들을 하나하나 XOR 연산을 한다.

 

4. XOR 연산을 한 결과들을 그래프로 그린다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

 

def to_hash(string):
    import hashlib
    encode_str = string.encode()
    return hashlib.sha1(encode_str).hexdigest()


def to_bin(hex_str):
    return bin(int(hex_str, 16))


def to_xor(a, b):
    return bin(int(a, 2) ^ int(b, 2))


def convert(string):
    return to_bin(to_hash(string))


def get_next(char, step=1):
    token = "abcdefghijklmnopqrstuvwxyz"
    char = char.lower()
    if char in token:
        index = token.index(char)
        if index + step < len(token):
            return token[index+step]
        else:
            return token[index-step]
    return ""


def cal(string):
    ori = convert(string)
    dst_strs = []
    xor_difs = []
    for i, char in enumerate(string):
        if char.isalpha():
            next_char = get_next(char)
            temp = string[:i] + next_char + string[i + 1:]
            dst_strs.append(temp)
            dst = convert(temp)
            xor = to_xor(ori, dst)
            xor_difs.append(xor)
            print(f"{i} {char}>{next_char} {temp}")
            print(f"ori={ori}\ndst={dst}\nxor={xor}")
    return dst_strs, xor_difs


def draw(title, x, y):
    import plotly
    from plotly.graph_objs import Scatter, Layout
    plotly.offline.plot({
        "data": [Scatter(x=x, y=y)],
        "layout": Layout(title=title)
    })


s = "a#bee#zoo#apple#lion"
attr, xor = cal(s)
draw(title=s, x=attr, y=xor)

 

 

 

 

 

 

 

'python lecture > project' 카테고리의 다른 글

[python] 주문시스템  (0) 2020.05.09
[blockchain] 블록체인 예제  (0) 2020.05.07
[edu] 연락처 (class, 연산자 오버로드)  (0) 2020.03.16
[edu] pillow (영상 처리)  (0) 2019.03.19
[edu] sqlite3 import/export to csv  (0) 2019.02.07
댓글