溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python實現(xiàn)AES和RSA加解密的方法

發(fā)布時間:2020-10-12 03:30:25 來源:腳本之家 閱讀:285 作者:如果的事 欄目:開發(fā)技術(shù)

本文實例為大家分享了python實現(xiàn)AES和RSA加解密的具體代碼,供大家參考,具體內(nèi)容如下

AES

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

from Crypto import Random
from Crypto.Hash import SHA
from Crypto.Cipher import AES
from 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 RSA
import 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是一種公鑰密碼算法,RSA的密文是對代碼明文的數(shù)字的 E 次方求mod N 的結(jié)果。也就是將明文和自己做E次乘法,然后再將其結(jié)果除以 N 求余數(shù),余數(shù)就是密文。RSA是一個簡潔的加密算法。E 和 N 的組合就是公鑰(public key)。

對于RSA的解密,即密文的數(shù)字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再對結(jié)果除以 N 求余數(shù)即可得到明文。D 和 N 的組合就是私鑰(private key)。

# 偽隨機數(shù)生成器
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算法可以實現(xiàn)公鑰加密、私鑰解密。

在C/S架構(gòu)的通信中,如果Client要向Server發(fā)送一段消息:

0、Server事先生成秘鑰對;

1、Client請求Server的公鑰;

2、Client用公鑰加密mesage,并將密文發(fā)給Server;

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

如果Server要向Client發(fā)送消息,流程也是類似的。

這個例子還有個問題,Server的公鑰是公開的,任何人都可以得到。Server只能保證只有自己的私鑰可以解密消息,但不能識別消息的來源是不是可靠,因為任何人都可能用公鑰加密一段文本發(fā)給Server,這里就涉及到數(shù)字簽名。

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

0、Server事先生成秘鑰對、Client也事先生成秘鑰對;

1、Client請求Server的公鑰;

2、Client用Server的公鑰加密mesage,并將密文發(fā)給Server,隨請求一起發(fā)送一個簽名(Clinet用私鑰加密一個簽名,并同時附帶上自己的公鑰);

3、Server用Clinet的公鑰解密出簽名,并核對;

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

小結(jié)

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI