AES和RSA加解密的Python用法

2022-09-16 01:45:11 字數 2459 閱讀 1083

aes 是一種對稱加密演算法,用key對一段text加密,則用同乙個key對密文解密,

from crypto import

random

from crypto.hash import

shafrom crypto.cipher import

aesfrom crypto.cipher import

pkcs1_v1_5 as cipher_pkcs1_v1_5

from crypto.signature import

pkcs1_v1_5 as signature_pkcs1_v1_5

from crypto.publickey import

rsaimport

base64#秘鑰

key = '

chenqichenqi1234'#

明文raw = '

sina company11111111111111111111'#

加密iv =random.new().read(aes.block_size)

cipher =aes.new(key, aes.mode_cfb, iv)

data = iv +cipher.encrypt(raw)#解密

iv = data[:16]

cipher =aes.new(key, aes.mode_cfb, iv)

print cipher.decrypt(data[16:])

rsa是一種公鑰密碼演算法,rsa的密文是對**明文的數字的e次方求modn的結果。也就是將明文和自己做e次乘法,然後再將其結果除以 n 求餘數,餘數就是密文。rsa是乙個簡潔的加密演算法。e 和 n 的組合就是公鑰public key)。

對於rsa的解密,即密文的數字的 d 次方求mod n 即可,即密文和自己做 d 次乘法,再對結果除以 n 求餘數即可得到明文。d 和 n 的組合就是私鑰private key)。

#

偽隨機數生成器

random_generator =random.new().read

#rsa演算法生成例項

rsa = rsa.generate(1024, random_generator)

# 秘鑰對的生成

private_pem =rsa.exportkey()

public_pem =rsa.publickey().exportkey()

message = "

chenqi

"# 公鑰加密

rsakey =rsa.importkey(public_pem)

cipher =cipher_pkcs1_v1_5.new(rsakey)

cipher_text =base64.b64encode(cipher.encrypt(message))

print

cipher_text

# 私鑰解密

rsakey =rsa.importkey(private_pem)

cipher =cipher_pkcs1_v1_5.new(rsakey)

text =cipher.decrypt(base64.b64decode(cipher_text), random_generator)

print text

如上,rsa演算法可以實現公鑰加密、私鑰解密。

在c/s架構的通訊中,如果client要向server傳送一段訊息:

0、server事先生成秘鑰對;

1、client請求server的公鑰;

2、client用公鑰加密mesage,並將密文發給server;

3、server用私鑰解密,獲取明文;

如果server要向client傳送訊息,流程也是類似的。

這個例子還有個問題,server的公鑰是公開的,任何人都可以得到。server只能保證只有自己的私鑰可以解密訊息,但不能識別訊息的**是不是可靠,因為任何人都可能用公鑰加密一段文字發給server,這裡就涉及到數字簽名。

clinet也可以生成自己的秘鑰對,請求server時把自己的公鑰帶過去,

0、server事先生成秘鑰對、client也事先生成秘鑰對;

1、client請求server的公鑰;

2、client用server的公鑰加密mesage,並將密文發給server,隨請求一起傳送乙個簽名(clinet用私鑰加密乙個簽名,並同時附帶上自己的公鑰);

3、server用clinet的公鑰解密出簽名,並核對;

4、server用私鑰解密,獲取明文;

小結

加密主要用對方的公鑰,解密用自己的私鑰。簽名用自己的私鑰,驗籤用對方的公鑰。

加密解密:公鑰加密,私鑰解密

簽名驗籤:私鑰簽名,公鑰驗籤

參考:

AES和RSA加解密的Python用法

aes 是一種對稱加密演算法,用key對一段text加密,則用同乙個key對密文解密,from crypto import random from crypto.hash import shafrom crypto.cipher import aesfrom crypto.cipher import...

python實現AES和RSA加解密的方法

aes aes 是一種對稱加密演算法,用key對一段text加密,則用同乙個key對密文解密,from crypto import random from crypto.hash import sha from crypto.cipher import aes from crypto.cipher ...

AES對稱加解密

python實現aes對稱加解密 關於aes對稱加密的概念網上很多,在此不在贅述,直接上 import base64 from crypto.cipher import aes aes加密解密工具類 資料塊128位 key 為16位 iv 為16位 aes加密模式為cbc 填充 pkcs7paddi...