python中rsa的RSA

One of them發表於2018-08-25

使用rsa模組實現RSA加密

RSA

RSA為非對稱加密, 有兩種10進位制的金鑰來實現加密解密.

  • 公鑰: 是服務端公開的一種金鑰, 是公開的任何人都可以知道, 其獲得的金鑰一般由長度256的十六進位制字串和十六進位制的’10001’構成.
  • 私鑰: 是服務端非公開的一種金鑰, 是私有化在服務端內部的, 常人是不知道的.

過程大致為: 使用公鑰在客戶端加密需要加密的資料, 然後傳送到伺服器端使用私鑰解密.

python程式碼

import rsa
import binascii


# 公鑰key會構成常為n, e值即256和'10001'.
public_key_n = '8d7e6949d411ce14d7d233d7160f5b2cc753930caba4d5ad24f923a505253b9c' \
               '39b09a059732250e56c594d735077cfcb0c3508e9f544f101bdf7e97fe1b0d97f2' \
               '73468264b8b24caaa2a90cd9708a417c51cf8ba35444d37c514a0490441a773ccb12'
               \
               '1034f29748763c6c4f76eb0303559c57071fd89234d140c8bb965f9725'
public_key_e = '10001'

# 轉換為RSA可使用的十進位制型別.
rsa_n = int(public_key_n, 16)
rsa_e = int(public_key_e, 16)

data = "需要加密的資料"

# 使用n, e值生成公鑰.
key = rsa.PublicKey(rsa_n, rsa_e)

# 用公鑰把資料加密.
endata = rsa.encrypt(data.encode(), key)
endata = binascii.b2a_hex(endata)
print(endata)

# 以string型別 輸出. 資料很長...
print(endata.decode())

流程

1.準備好合適建立公鑰的n, e值(十進位制)和需加密的資料.
2.使用n, e值生成公鑰.
3.使用encrypt生成加密後的資料.

4.可使用binascii來講密文格式化輸出.
# 沒有金鑰當然是沒得解密了.

相關文章