[μνΈ νλ‘ν μ½] λμ§νΈ μλͺ | μ μμλͺ μ μν μ볡νΈν | 곡κ°ν€ μ¬μ©μ μν μ볡νΈν
- -
λμ§νΈ μλͺ
• λ©μμ§μ μΆμ²μ λ©μμ§ λ΄μ©μ λν νμ μ μν΄ λ©μμ§ μ 체λ₯Ό μνΈννλ©΄ λλ€
• μ΄λ κ² νλ©΄ λ©λͺ¨λ¦¬κ° λ§μ΄ λ λ€
• λ¬Έμμ κΈ°λ₯μ λμ νλ μμ λΉνΈλΈλ‘μ μνΈννλ λ°©λ²μ΄ νμ
• μμ λΉνΈλΈλ‘μ μΈμ¦μ(authenticator)λΌ κ³ νλ€
μΈμ¦μ
• μΈμ¦μλ λ³κ²½ μμ΄ λ¬Έμλ§ λ³κ²½νλ κ²μ΄ λΆκ°λ₯
• μΈμ¦μλ₯Ό μ‘μ μμ κ°μΈν€λ‘ μνΈννλ€ λ©΄ μΆμ², λ΄μ©, μμ νμΈν΄μ£Όλ μλͺ μ΄λ€
• SHA-1 κ°μ μμ ν΄μμ½λκ° μ΄λ° μν
• λ©μμ§μ 무결μ±μ 보μ₯νμ§λ§ κΈ°λ°μ±μ 보μ₯ λͺ»νλ€
λμ§νΈ μλͺ μ 2κ°μ§ λ°©λ²
1. λ©μμ§μ μλͺ
2. λ©μμ§ ν΄μκ°μ μλͺ
곡κ°ν€μ μν μνΈν(곡κ°ν€ μνΈ)
κ°μΈν€μ μν μνΈν(λμ§νΈμλͺ )
μ΅λ 86κΈμκΉμ§ κ°λ₯,κ³ μ μ 128λΉνΈμ΄λ€. (ν€ κΈΈμ΄κ° 1024 μ΄λ―λ‘ 128 κ³ μ λΉνΈμΈ κ², 2048μ κ²½μ° 256 λΉνΈμ΄λ€.)
2048 μ κ²½μ° 214κΈμκΉμ§ κ°λ₯νλ€.
μμ€μ½λ
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP #μνΈνλ₯Ό μν΄ μ¬μ©(νΌλΈλ¦ν€ μμ€ν
)
# =============================================================================
# key μμ± λ° μ μ₯
# =============================================================================
def make_key():
pr_key = RSA.generate(2048) #1024κΈΈμ΄μ ν€ μμ±.
pu_key = pr_key.public_key()
pr_file = open('pr.key','wb')
pr_file.write(pr_key.export_key('PEM'))
pr_file.close()
pu_file = open('pu.key','wb')
pu_file.write(pu_key.export_key('PEM'))
pu_file.close()
#make_key()
#μ ν¨μλ₯Ό λ¨Όμ μ€νμμΌμ, key νμΌμ μ»κ³ , μ΄ ν λ©μΈμ μ€νμμΌμ€λ€.
# =============================================================================
# λ©μΈμ§ μνΈν
# =============================================================================
def encrypt_msg(msg,key):
tool = PKCS1_OAEP.new(key)
msg_enc = tool.encrypt(msg)
return msg_enc
# =============================================================================
# λ©μΈμ§ 볡νΈν
# =============================================================================
def decrypt_msg(msg,key):
tool= PKCS1_OAEP.new(key)
msg_dec = tool.decrypt(msg)
return msg_dec
# =============================================================================
# νμΌμμ ν€ κ°μ Έμ€κΈ°
# =============================================================================
def get_key(path):
fr = open(path,'rb')
key = RSA.importKey(fr.read())
return key
# =============================================================================
# λ©μΈ ν¨μ
# =============================================================================
def main():
#msg = 'i'*86 #μ΅λ 86κΈμκΉμ§ μνΈν λ¨. μνΈν νλ©΄ 무쑰건 128λΉνΈ.
msg = 'hi my name is haeun'
pu_key = get_key('pu.key')
msg_enc = encrypt_msg(msg.encode(), pu_key)
print("μλ¬Έ",msg)
print("μνΈν κΈΈμ΄",len(msg_enc))
print("μνΈν",msg_enc)
pr_key = get_key('pr.key')
msg_dec = decrypt_msg(msg_enc, pr_key)
print("볡νΈν",msg_dec)
main()
κ²°κ³Ό κ°
곡κ°ν€ λΉλ°ν€λ₯Ό λ°κ³ νλ¬Έμ μνΈν, 볡νΈν νλ κ³Όμ μ μ€μ΅ν΄λ³Έλ€κ³ νλ©΄!
1. μλ‘ κ³΅κ°ν€κ΅ν (A,Bκ° ν€λ₯Ό μλ‘ κ³΅κ°νλ€ -> 곡κ°ν€)
2. 보λ΄κ³ μΆμ λ©μΈμ§ μνΈν -> μλμ 곡κ°ν€λ‘ μνΈν (Aκ° Bμκ² λ³΄λ΄λ κ²½μ° Aλ Bμ 곡κ°ν€λ₯Ό μ΄μ©ν΄μ μνΈν νν, base64λ‘ μΈμ½λ© ν΄μ€λ€)
3. μλλ μμ μ κ°μΈν€λ‘ λ©μΈμ§λ₯Ό νμ΄λ³Έλ€.(λ©μΈμ§λ₯Ό λ°μ Bλ Aμκ² λ°μ μνΈλ¬Έμ λ¨Όμ base64decodingνκ³ -> μ΄ν λ΄μ©μ 볡νΈν νλ€)
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP #μνΈνλ₯Ό μν΄ μ¬μ©(νΌλΈλ¦ν€ μμ€ν
)
# =============================================================================
# key μμ± λ° μ μ₯
# =============================================================================
def make_key():
pr_key = RSA.generate(2048) #1024κΈΈμ΄μ ν€ μμ±.
pu_key = pr_key.public_key()
pr_file = open('pr.key','wb')
pr_file.write(pr_key.export_key('PEM'))
pr_file.close()
pu_file = open('pu.key','wb')
pu_file.write(pu_key.export_key('PEM'))
pu_file.close()
#make_key()
#μ ν¨μλ₯Ό λ¨Όμ μ€νμμΌμ, key νμΌμ μ»κ³ , μ΄ ν λ©μΈμ μ€νμμΌμ€λ€.
# =============================================================================
# λ©μΈμ§ μνΈν
# =============================================================================
def encrypt_msg(msg,key):
tool = PKCS1_OAEP.new(key)
msg_enc = tool.encrypt(msg)
return msg_enc
# =============================================================================
# λ©μΈμ§ 볡νΈν
# =============================================================================
def decrypt_msg(msg,key):
tool= PKCS1_OAEP.new(key)
msg_dec = tool.decrypt(msg)
return msg_dec
# =============================================================================
# νμΌμμ ν€ κ°μ Έμ€κΈ°
# =============================================================================
def get_key(path):
fr = open(path,'rb')
key = RSA.importKey(fr.read())
return key
# =============================================================================
# νμΌ μνΈν
# =============================================================================
def encrypt_file(file_name,key):
pass
# =============================================================================
# νμΌ λ³΅νΈν
# =============================================================================
def decrypt_file(file_name,key):
pass
# =============================================================================
# λ©μΈ ν¨μ
# =============================================================================
def main():
#msg = 'i'*86 #μ΅λ 86κΈμκΉμ§ μνΈν λ¨. μνΈν νλ©΄ 무쑰건 128λΉνΈ.
# msg = 'κΉλν λ°λ³΄ λ©μ²μ΄ γ
γ
'
# pu_key = get_key('pu.key')
# msg_enc = encrypt_msg(msg.encode(), pu_key)
# print("μλ¬Έ",msg)
# print("μνΈν κΈΈμ΄",len(msg_enc))
# print("μνΈν",msg_enc)
txt = 'TsdbYuJbSTA+4U0IUU5DvQnX/Sb6vP27lefWG0aGjRtQCuwHpmZE+VebfYfyKJliqZH147nYifKG1snIJuZ0c0XLOvXVmHkryWN5FiGcrZqtAEmoXDKUx/m5kCeWteuGmoQGEonn/LVqmexRqg1cBzOx219ibd8Nxa5uQV+u5JN/VRyQFA6Zf/A8Wvk+IxH7ANiK99lrrff9Q94BGPMB8BE6Oj3cAcxEirPfHf4o8SIApKv6l9DnFOFRdZUF0k2ctwNpfDM21wRC5LEFnOsg2pDVPh789ErCjMY/N4+yOg7mfMPVJDOFrdrJ0ToZ3CiN5d5CpEr+Ckn7T3Yp8f3z6g=='
txt = base64.b64decode(txt)
#msg_enc_txt = base64.b64encode(msg_enc)
print(txt)
pr_key = get_key('pr.key')
msg_dec = decrypt_msg(txt, pr_key)
print("볡νΈν",msg_dec.decode())
main()
μνΈν+ base64 encoding λ λ©μΈμ§
볡νΈν + base64decoding λ λ©μΈμ§
μμ±λλ ν€λ λ€μκ³Ό κ°μ΄ νμλλ€.
29λΌμΈμ κΈ°μ€μΌλ‘ μλ pr_key, μλλ pu_key μ΄λ€.
'Languages > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μνΈνλ‘ν μ½] Diffie-Hellman ν€ μκ³ λ¦¬μ¦ μ½λ ꡬν (0) | 2021.05.20 |
---|---|
[μνΈ νλ‘ν μ½] μ μμλͺ ꡬννκΈ° (0) | 2021.05.14 |
[μνΈ νλ‘ν μ½] 곡κ°ν€ μνΈ (0) | 2021.04.15 |
[μνΈ μκ³ λ¦¬μ¦] μνΈν μ΄μ 리 | μνΈ | λμΉμνΈ | μ€νΈλ¦Ό & λΈλ‘ (0) | 2021.04.01 |
λΉμ μ΄ μ’μν λ§ν μ½ν μΈ
μμ€ν κ³΅κ° κ°μ¬ν©λλ€