python rsa非對稱加密

2021-10-22 13:12:40 字數 3754 閱讀 7005

使用指令碼生成私鑰和金鑰:

from crypto import random

from crypto.publickey import rsa

random_generator = random.new(

).read

rsa = rsa.generate(

2048

, random_generator)

# 生成私鑰

private_key = rsa.exportkey(

)print

(private_key.decode(

'utf-8'))

# 生成公鑰

public_key = rsa.publickey(

).exportkey(

)print

(public_key.decode(

'utf-8'))

with

open

('/home/rsa_keys/rsa_private_key.pem'

,'wb'

)as f:

f.write(private_key)

with

open

('/home/rsa_keys/rsa_public_key.pem'

,'wb'

)as f:

f.write(public_key)

使用公鑰加密,私鑰解密(公鑰加密的資料,只有私鑰才可以解密)

"""

使用公鑰加密,私鑰解密:防止資料洩露

"""import base64

from crypto.publickey import rsa

from crypto.hash import sha

from crypto.signature import pkcs1_v1_5 as pkcs1_signature

from crypto.cipher import pkcs1_v1_5 as pkcs1_cipher

defget_key

(key_file)

:with

open

(key_file)

as f:

data = f.read(

) key = rsa.importkey(data)

return key

defencrypt_data

(msg)

: public_key = get_key(

'/home/rsa_keys/rsa_public_key.pem'

) cipher = pkcs1_cipher.new(public_key)

encrypt_text = base64.b64encode(cipher.encrypt(

bytes

(msg.encode(

"utf8"))

))return encrypt_text.decode(

'utf-8'

)def

decrypt_data

(encrypt_msg)

: private_key = get_key(

'/home/rsa_keys/rsa_private_key.pem'

) cipher = pkcs1_cipher.new(private_key)

back_text = cipher.decrypt(base64.b64decode(encrypt_msg),0

)return back_text.decode(

'utf-8'

)def

test_encrypt_decrypt()

: msg =

encrypt_text = encrypt_data(msg)

print

('ssss'

,encrypt_text)

decrypt_text = decrypt_data(encrypt_text)

print

('ddd'

, decrypt_text)

print

(msg == decrypt_text)

if __name__ ==

'__main__'

: test_encrypt_decrypt(

)

使用私鑰加密,不能用公鑰解密,只能用公鑰驗證加密後的資料是否被篡改

"""

使用私鑰來加密,使用公鑰來驗籤:防止資料被篡改

"""import base64

from crypto.publickey import rsa

from crypto.hash import sha

from crypto.signature import pkcs1_v1_5 as pkcs1_signature

from crypto.cipher import pkcs1_v1_5 as pkcs1_cipher

defget_key

(key_file)

:with

open

(key_file)

as f:

data = f.read(

) key = rsa.importkey(data)

return key

defrsa_private_sign

(data)

: private_key = get_key(

'/home/rsa_keys/rsa_private_key.pem'

) signer = pkcs1_signature.new(private_key)

digest = sha.new(

) digest.update(data.encode(

"utf8"))

sign = signer.sign(digest)

signature = base64.b64encode(sign)

signature = signature.decode(

'utf-8'

)return signature

defrsa_public_check_sign

(text, sign)

: publick_key = get_key(

'/home/rsa_keys/rsa_public_key.pem'

) verifier = pkcs1_signature.new(publick_key)

digest = sha.new(

) digest.update(text.encode(

"utf8"))

return verifier.verify(digest, base64.b64decode(sign)

)def

test_sign()

: msg =

'coolpython.net'

sign = rsa_private_sign(msg)

print

(rsa_public_check_sign(msg, sign)

)# true

if __name__ ==

'__main__'

: test_sign(

)

使用rsa非對稱加密的方式,安全,除非別人能夠拿到你的公鑰和私鑰,但是缺點就是rsa演算法的秘鑰很長,加密的計算量比較大,安全性較高,但是加密速度比較慢,

對稱加密 非對稱加密

區別在於加密金鑰和解密金鑰是否一樣,一樣則是對稱加密,不一樣則是非對稱加密。對稱加密計算量小,但若不同的客戶端使用不能的金鑰時,伺服器的複雜大。常用的對稱加密包括 des 3des aes des 3des使用的架構為feistel。des金鑰長度為56位,3des相容des,可設定3個56位密碼,...

對稱加密 非對稱加密

1 對稱加密 對稱加密採用了對稱密碼編碼技術,它的特點是檔案加密和解密使用相同的金鑰,即加密金鑰也可以用作解密金鑰,這種方法在密碼學中叫做對稱加密演算法,對稱加密演算法使用起來簡單快捷,金鑰較短,且破譯困難,除了資料加密標準 des 另乙個對稱金鑰加密系統是國際資料加密演算法 idea 它比des的...

對稱加密 非對稱加密

演算法選擇 對稱加密aes,非對稱加密 ecc,訊息摘要 md5,數字簽名 dsa 對稱加密演算法 加解密金鑰相同 名稱金鑰長度 運算速度 安全性資源消耗 des56位較快低 中3des 112位或168位慢中 高aes 128 192 256位快高 低非對稱演算法 加密金鑰和解密金鑰不同 名稱成熟...