μƒˆμ†Œμ‹

Languages/Python

[Python] ν•΄μ‹œκ°’ κ΅¬ν•˜κΈ°(SHA-256)

  • -
λ°˜μ‘ν˜•

"SHA256 ν•΄μ‹œ κ°’ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ 짜기."

μž…λ ₯ν•œ 값을 ν•œλ²ˆ ν•΄μ‹œν™” μ‹œμΌœμ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ€ λ§Žμ€λ°, μ—¬λŸ¬λ²ˆ μ›ν•˜λŠ” 만큼

ν•΄μ‹œλ₯Ό ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ€ μ—†λŠ” 것 κ°™μ•„ μ§œλ΄€μŠ΅λ‹ˆλ‹€.

 

 


 

좜처 : https://naleejang.tistory.com/218

 

μœ„ μ‚¬μ΄νŠΈμ—μ„œ ν•΄μ‹œμ— λŒ€ν•΄ μžμ„Ένžˆ μ„€λͺ…λ˜μ–΄ μžˆμœΌλ‹ˆ μ°Έκ³ ν•˜μ„Έμš”!

 

ν•΄μ‹œ ν•¨μˆ˜(hash function)λŠ” μž„μ˜μ˜ 길이의 데이터λ₯Ό κ³ μ •λœ 길이의 λ°μ΄ν„°λ‘œ λ§€ν•‘ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. ν•΄μ‹œ ν•¨μˆ˜μ— μ˜ν•΄ μ–»μ–΄μ§€λŠ” 값은 ν•΄μ‹œ κ°’ν•΄μ‹œ μ½”λ“œ, ν•΄μ‹œ 체크섬 λ˜λŠ” κ°„λ‹¨ν•˜κ²Œ ν•΄μ‹œλΌκ³  ν•œλ‹€. 

 

ν•΄μ‹œν•¨μˆ˜μ€‘μ—λŠ” μ•”ν˜Έν•™μ  ν•΄μ‹œν•¨μˆ˜(Cryptographic Hash Function)와 λΉ„μ•”ν˜Έν•™μ  ν•΄μ‹œν•¨μˆ˜λ‘œ κ΅¬λΆ„λ˜κ³€ ν•œλ‹€.

μ•”ν˜Έν•™μ  ν•΄μ‹œν•¨μˆ˜μ˜ μ’…λ₯˜λ‘œλŠ” MD5, SHA계열 ν•΄μ‹œν•¨μˆ˜κ°€ 있으며 λΉ„μ•”ν˜Έν•™μ  ν•΄μ‹œν•¨μˆ˜λ‘œλŠ” CRC32등이 μžˆλ‹€.

μ•”ν˜Έν•™μ  ν•΄μ‹œν•¨μˆ˜λŠ” 역상(pre-image), 제2역상(2nd preimage), 좩돌쌍(collision)에 λŒ€ν•˜μ—¬ μ•ˆμ „μ„±μ„ κ°€μ Έμ•Ό ν•˜λ©° 인증에 μ΄μš©λœλ‹€ . μ•”ν˜Έν•™μ  ν•΄μ‹œν•¨μˆ˜λŠ” μž„μ˜μ˜ 길이λ₯Ό μž…λ ₯ λ°›κΈ°λŠ” ν•˜μ§€λ§Œ MD Strength Paddingν•  λ•Œ 길이정보가 μž…λ ₯λ˜λ―€λ‘œ μ΅œλŒ€ 길이에 λŒ€ν•œ μ œν•œμ΄ μžˆλ‹€. 예λ₯Ό λ“€μ–΄ νŒ¨λ”©μ‹œ ν•˜μœ„ 8λΉ„νŠΈμ— 길이정보가 μž…λ ₯ λ˜λŠ” κ²½μš°μ—λŠ” ν•΄μ‹œκ°€λŠ₯ν•œ μ΅œλŒ€ κΈΈμ΄λŠ” 0xFFκ°€ λ˜μ–΄ 255λ°”μ΄νŠΈκ°€ λœλ‹€.(μ‹€μ œ κΈΈμ΄μ •λ³΄λŠ” νŒ¨λ”©λ°©μ‹μ— 따라 λ‹€λ₯Ό 수 μžˆλ‹€)

좜처 : ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98

 

SHA256μ΄λž€?

 

wiki.hash.kr/index.php/SHA256

μœ„ μ‚¬μ΄νŠΈ μ°Έκ³ 

 

SHA256 != μ•”ν˜Έν™”κ°€ μ•„λ‹˜

 

 

import hashlib
#import sys
#sys.stdout = open('hash.txt','a')

print("==================================================β˜… HASH256 β˜…==================")
put = input("νŒ¨μŠ€μ›Œλ“œ μž…λ ₯ : ")
passwd = ''
result = hashlib.sha256(put.encode())
passwd += result.hexdigest()
result = hashlib.sha256(passwd.encode())

print("Start Passwd : ", put)

print("==================================================β˜… WAIT ... β˜…================")

num = int(input("반볡 횟수 : "))
for i in range(1,num+1):
    result = hashlib.sha256(passwd.encode())
    print("\npasswd(%d) : " %i, passwd)
    print("SHA256 : ",result.hexdigest())

    passwd=''
    passwd += result.hexdigest()

 

κ²°κ³Ό 

 

 

μ—¬λŸ¬λ²ˆ 반볡 ν•  경우, μœ„μ— λ‚΄μš©μ΄ 지릴 수 μžˆμœΌλ―€λ‘œ , μœ„ μ½”λ“œμ—μ„œ # (주석) 처리 해놓은 뢀뢄을 μ§€μ›Œμ€€λ‹€.

 

'a' 으둜 μ£Όλ©΄ νŒŒμΌμ— μ΄μ–΄μ„œ μ“°λŠ” 것.

'w' κ·Έλƒ₯ μ“°λŠ” μ˜΅μ…˜(μ΄μ–΄μ„œ 덧뢙이지 μ•ŠμŒ)

 

 

ν…μŠ€νŠΈ νŒŒμΌμ„ 확인해보면, κ°’λ§Œ μž…λ ₯ ν•œ ν›„ 확인해보면

10000번이 μ œλŒ€λ‘œ μ €μž₯λ˜μ–΄μžˆλ‹€.

 

 

 

 

검증 해보기

emn178.github.io/online-tools/sha256.html 인코딩 μ‚¬μ΄νŠΈμ—μ„œ ν…ŒμŠ€νŠΈ

 

μ°Έκ³  μ‚¬μ΄νŠΈ 

python.flowdas.com/library/hashlib.html

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.