使用指令碼生成私鑰和金鑰:
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位快高 低非對稱演算法 加密金鑰和解密金鑰不同 名稱成熟...