匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Python密码学:基础算法及密码安全技术

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密码学的基础算法及密码安全技术介绍,本文仅涉及了部分内容,读者可以进一步探索密码学领域,学习更多算法和技术。