Python加密算法


Python是一种高级编程语言,拥有广泛的应用场景。其中,加密算法是一个重要的应用领域。Python中提供了多种加密算法,包括对称加密、非对称加密、单向哈希加密等。本文将从多个方面对Python加密算法进行详细阐述。

一、对称加密算法

对称加密算法指的是加密和解密使用相同的密钥的算法。常见的对称加密算法有DES、3DES、AES等。

以AES算法为例,以下是一个加密和解密的示例:

import hashlib
from Crypto.Cipher import AES
 
class AESCipher(object):
    def __init__(self, key):
        self.bs = AES.block_size
        self.key = hashlib.sha256(key.encode()).digest()
 
    def encrypt(self, raw):
        raw = self._pad(raw)
        cipher = AES.new(self.key, AES.MODE_CBC, self._iv())
        return cipher.encrypt(raw)
 
    def decrypt(self, enc):
        cipher = AES.new(self.key, AES.MODE_CBC, self._iv())
        return self._unpad(cipher.decrypt(enc))
 
    def _pad(self, s):
        pad_len = self.bs - len(s) % self.bs
        return s + bytes([pad_len] * pad_len)
 
    def _unpad(self, s):
        return s[:-ord(s[len(s)-1:])]
 
    def _iv(self):
        # 自定义初始向量
        return b'0123456789abcdef'
        
cipher = AESCipher('password')  # 这里的password用于生成密钥,可自行设置
encrypt_data = cipher.encrypt('hello world')
decrypt_data = cipher.decrypt(encrypt_data)
print(decrypt_data)  # 输出结果:hello world

以上示例代码中的AES算法的密钥是通过hashlib.sha256生成的,输入的明文数据先经过填充然后再与初始向量进行CBC模式的加密,最后输出密文。解密时则先通过密钥再次进行CBC模式的解密,然后再移除填充得到明文。

二、非对称加密算法

非对称加密算法指的是加密和解密使用不同的密钥的算法,通常指使用公钥加密,私钥解密。常见的非对称加密算法有RSA、ECC等。

以下是一个使用RSA算法进行加密和解密的示例:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
 
# 生成RSA密钥对
key = RSA.generate(1024)
# 获取公钥和私钥
public_key = key.publickey().export_key()
private_key = key.export_key()
 
# 加密文本
def encrypt(plain_text):
    cipher_rsa = PKCS1_v1_5.new(RSA.import_key(public_key))
    cipher_text = cipher_rsa.encrypt(plain_text.encode())
    return cipher_text
 
# 解密文本
def decrypt(cipher_text):
    cipher_rsa = PKCS1_v1_5.new(RSA.import_key(private_key))
    plain_text = cipher_rsa.decrypt(cipher_text, b'None')
    return plain_text.decode()
    
plain_text = 'hello world'
cipher_text = encrypt(plain_text)
result = decrypt(cipher_text)
print(result)  # 输出结果:hello world

以上示例使用Crypto.PublicKey.RSA和Crypto.Cipher.PKCS1_v1_5模块进行加密和解密。在生成RSA密钥对后,使用公钥对原文进行加密并输出密文,再使用私钥解密获得明文。

三、单向哈希加密算法

单向哈希加密算法是指将明文通过几何变换得到一个对应的固定长度的值,通常称为哈希值,而不能通过哈希值反推出明文,因此也称为不可逆哈希算法。常用的单向哈希加密算法有SHA-1、SHA-2等。

以下是一个使用SHA-256算法进行哈希加密的示例:

import hashlib
 
plain_text = 'hello world'
hash_obj = hashlib.sha256(plain_text.encode())
hash_result = hash_obj.hexdigest()
print(hash_result)  # 输出结果:a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146

以上示例使用hashlib模块进行哈希加密,并输出哈希值。

评论关闭