Python密码学:基础算法及密码安全技术 密码学是一门涵盖密码学算法、密码协议、密码系统等,应用于信息加密、数字签名等安全领域的学科。Python作为一种高效、易用的编程语言,也成为了密码学领域中经常被使用的语言。在本篇文章中,我们将探讨密码学的基础算法以及一些密码安全技术,并使用Python实现这些算法和技术。 一、对称加密算法 对称加密算法是一种加密和解密使用同一个密钥的算法。在加密过程中,将明文通过密钥加密得到密文,在解密时同样使用密钥解密密文得到明文。对称加密算法的代表是DES、3DES、AES等。以下是使用Python实现一个基于AES算法的加密和解密示例。 使用PyCryptodome库实现AES加密和解密: ```python from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from base64 import b64encode, b64decode # 加密 def encrypt(key, data): cipher = AES.new(key.encode('utf8'), AES.MODE_CBC) encrypted = cipher.encrypt(pad(data.encode('utf8'), AES.block_size)) return b64encode(encrypted).decode('utf8') # 解密 def decrypt(key, encrypted): cipher = AES.new(key.encode('utf8'), AES.MODE_CBC) decrypted = unpad(cipher.decrypt(b64decode(encrypted.encode('utf8'))), AES.block_size) return decrypted.decode('utf8') # 测试 key = '1234567890123456' data = 'Hello world!' encrypted = encrypt(key, data) print(encrypted) # '4e8lJ1laPTfaJAZQ3sVJ7w==' decrypted = decrypt(key, encrypted) print(decrypted) # 'Hello world!' ``` 二、非对称加密算法 非对称加密算法使用一对密钥,即公钥和私钥,其中公钥可以公开,而私钥只能由所有者持有。在加密过程中,使用公钥加密得到密文,在解密时使用私钥解密密文得到明文。非对称加密算法的代表是RSA、DSA、ECC等。以下是使用Python实现一个基于RSA算法的加密和解密示例。 使用PyCryptodome库实现RSA加密和解密: ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from base64 import b64encode, b64decode # 生成密钥对 def generate_key_pair(): key = RSA.generate(2048) private_key = key.export_key() public_key = key.publickey().export_key() return private_key.decode('utf8'), public_key.decode('utf8') # 加密 def encrypt(public_key, data): key = RSA.import_key(public_key.encode('utf8')) cipher = PKCS1_OAEP.new(key) encrypted = cipher.encrypt(data.encode('utf8')) return b64encode(encrypted).decode('utf8') # 解密 def decrypt(private_key, encrypted): key = RSA.import_key(private_key.encode('utf8')) cipher = PKCS1_OAEP.new(key) decrypted = cipher.decrypt(b64decode(encrypted.encode('utf8'))) return decrypted.decode('utf8') # 测试 private_key, public_key = generate_key_pair() data = 'Hello world!' encrypted = encrypt(public_key, data) print(encrypted) # 'Qe8+Acz...aSQ==' decrypted = decrypt(private_key, encrypted) print(decrypted) # 'Hello world!' ``` 三、哈希函数 哈希函数是将任意长度的数据映射为固定长度的数据的函数。哈希函数的特点是单向性,即从哈希值不能推算出原始数据;抗碰撞性,即两个不同的数据哈希值相同的概率极小。哈希函数常用于密码学中的消息摘要、数字签名等场景。以下是使用Python实现一个基于SHA256哈希函数的示例。 使用Python自带的hashlib库实现SHA256哈希函数: ```python import hashlib # 哈希函数 def hash(data): h = hashlib.sha256() h.update(data.encode('utf8')) return h.hexdigest() # 测试 data = 'Hello world!' hashed_data = hash(data) print(hashed_data) # 'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9' ``` 四、数字签名 数字签名是一种确保数据完整性、真实性和不可否认性的技术。数字签名通常使用非对称加密算法和哈希函数实现。发送方使用哈希函数对数据进行摘要,再使用私钥进行签名,将签名和数据一起发送给接收方。接收方使用发送方的公钥进行验签,使用哈希函数对收到的数据进行摘要,并将接收到的签名进行解密,判断签名的正确性。以下是使用Python实现一个基于RSA算法和SHA256哈希函数的数字签名示例。 使用PyCryptodome库实现数字签名: ```python from Crypto.PublicKey import RSA from Crypto.Signature import pkcs1_15 from Crypto.Hash import SHA256 from base64 import b64encode, b64decode # 生成密钥对 def generate_key_pair(): key = RSA.generate(2048) private_key = key.export_key() public_key = key.publickey().export_key() return private_key.decode('utf8'), public_key.decode('utf8') # 数字签名 def sign(private_key, data): key = RSA.import_key(private_key.encode('utf8')) h = SHA256.new(data.encode('utf8')) signature = pkcs1_15.new(key).sign(h) return b64encode(signature).decode('utf8') # 验签 def verify(public_key, data, signature): key = RSA.import_key(public_key.encode('utf8')) h = SHA256.new(data.encode('utf8')) try: pkcs1_15.new(key).verify(h, b64decode(signature.encode('utf8'))) return True except: return False # 测试 private_key, public_key = generate_key_pair() data = 'Hello world!' signature = sign(private_key, data) print(signature) # 'JUOdva...qSw==' verified = verify(public_key, data, signature) print(verified) # True ``` 以上就是Python密码学的基础算法及密码安全技术介绍,本文仅涉及了部分内容,读者可以进一步探索密码学领域,学习更多算法和技术。