首页 > 编程知识 正文

Python丨对称还是非对称

时间:2023-11-19 11:52:55 阅读:306091 作者:OMRS

对称加密和非对称加密是密码学中两种常见的加密算法。那么在Python中,我们使用哪种加密方式呢?本文将从多个角度对Python丨对称还是非对称进行详细阐述。

一、对称加密

1、对称加密算法

对称加密算法是一种使用相同的密钥进行加密和解密的加密算法。Python中常用的对称加密算法有AES、DES等。下面是一个使用AES对称加密算法进行加密和解密的代码示例:

import hashlib
from Crypto.Cipher import AES

def pad(s):
    return s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size)

def unpad(s):
    return s[:-ord(s[len(s) - 1:])]

def encrypt(key, text):
    key = hashlib.sha256(key.encode('utf-8')).digest()
    text = pad(text)
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_text = cipher.encrypt(text.encode('utf-8'))
    return encrypted_text.hex()

def decrypt(key, encrypted_text):
    key = hashlib.sha256(key.encode('utf-8')).digest()
    cipher = AES.new(key, AES.MODE_ECB)
    decrypted_text = cipher.decrypt(bytes.fromhex(encrypted_text)).decode('utf-8')
    return unpad(decrypted_text)

key = 'secret_key'
text = 'Hello World!'
encrypted_text = encrypt(key, text)
decrypted_text = decrypt(key, encrypted_text)

print('Encrypted text:', encrypted_text)
print('Decrypted text:', decrypted_text)

2、对称加密的特点

对称加密的特点是速度快,适合大规模数据的加密和解密。但是由于加密和解密使用相同的密钥,如果密钥泄露,就会导致加密数据被破解。因此,在传输密钥时需要使用安全的方式。

二、非对称加密

1、非对称加密算法

非对称加密算法使用一对密钥,分别是公钥和私钥。在Python中,常用的非对称加密算法有RSA、DSA等。下面是一个使用RSA非对称加密算法进行加密和解密的代码示例:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5

def encrypt(public_key, text):
    rsa_key = RSA.importKey(public_key)
    cipher = PKCS1_v1_5.new(rsa_key)
    encrypted_text = cipher.encrypt(text.encode('utf-8'))
    return encrypted_text.hex()

def decrypt(private_key, encrypted_text):
    rsa_key = RSA.importKey(private_key)
    cipher = PKCS1_v1_5.new(rsa_key)
    decrypted_text = cipher.decrypt(bytes.fromhex(encrypted_text), None).decode('utf-8')
    return decrypted_text

public_key = '''-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----'''

private_key = '''-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----'''

text = 'Hello World!'
encrypted_text = encrypt(public_key, text)
decrypted_text = decrypt(private_key, encrypted_text)

print('Encrypted text:', encrypted_text)
print('Decrypted text:', decrypted_text)

2、非对称加密的特点

非对称加密的特点是安全性高,加密和解密使用不同的密钥。公钥用于加密,私钥用于解密。由于私钥保密,因此即使公钥泄露,也不会导致加密数据被破解。但是非对称加密算法速度较慢,适合小规模数据的加密和解密。

三、结论

Python既可以使用对称加密算法,也可以使用非对称加密算法。对称加密适合大规模数据的加密和解密,非对称加密适合安全性要求较高的场景。我们在选择加密算法时,需要根据实际情况权衡速度和安全性。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。