μƒˆμ†Œμ‹

인기 검색어

πŸ“  Secure/πŸ†” Crypto

[Crypto] Python | RSA μ•”ν˜Έ μ•Œκ³ λ¦¬μ¦˜ ꡬ좕

  • -
λ°˜μ‘ν˜•

from Crypto.Util.number import getPrime
from gmpy2 import invert

# νŒŒμ΄μ¬μ—μ„œ p, q 값을 μƒμ„±ν•˜λŠ” 방법
p = getPrime(1024) #1024 bit / λ¬΄μž‘μœ„λ‘œ 큰 두 μ†Œμˆ˜ p, q κ³ λ₯΄κΈ°
q = getPrime(1024)

# n κ°’ κ³„μ‚°ν•˜λŠ” 법
n = p * q

# n μ΄ν•˜μ˜ nκ³Ό μ„œλ‘œμ†ŒμΈ μˆ˜λ“€μ˜ 개수 계산
phi = (p - 1) * (q - 1)

# 1<e<phi 이고, e와 phiκ°€ μ„œλ‘œμ†ŒμΈ eλ₯Ό 선택 ( λŒ€κ°œ 65537 μ‚¬μš© )
e=65537

# de=1(mod phi)λ₯Ό λ§Œμ‘±ν•˜λŠ” dλ₯Ό κ³„μ‚°ν•œλ‹€ / μž„μ˜μ˜ μ •μˆ˜ k에 λŒ€ν•΄μ„œ de=1+k phiλ₯Ό 만쑱
d= invert(e,phi)

print("κ³΅κ°œν‚€ n = ",n)
print("κ³΅κ°œν‚€ e = ",e)
print("κ°œμΈν‚€ d = ",d)

μ•”ν˜Έν™”μ™€ λ³΅ν˜Έν™”

# μ•”ν˜Έν™”
# 원본 λ©”μ‹œμ§€ m, μ•”ν˜Έν™”λœ λ©”μ‹œμ§€ M, κ³΅κ°œν‚€ e,n , κ°œμΈν‚€ d
m=11

# μ•”ν˜Έν™” 된 λ©”μ‹œμ§€ = 원본 λ©”μ‹œμ§€ ** κ³΅κ°œν‚€e % κ³΅κ°œν‚€n
M = m**e%n
print("μ•”ν˜Έν™” 된 λ©”μ‹œμ§€ = ",M)

# 원본 λ©”μ‹œμ§€ = μ•”ν˜Έν™” 된 λ©”μ‹œμ§€ ** κ°œμΈν‚€ d % κ³΅κ°œν‚€n
# λ³΅ν˜Έν™”
m = M**d%n
print(" λ³΅ν˜Έν™” 된 λ©”μ‹œμ§€n = ",m)
λ°˜μ‘ν˜•
Contents

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

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