写出一段运用ECDH进行加解密的python代码
时间: 2023-07-23 18:09:14 浏览: 196
Python写的一个加解密案例
以下是一个使用ECDH进行加解密的简单Python代码示例:
```python
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
from cryptography.hazmat.backends import default_backend
# 生成ECC公私钥对
private_key = ec.generate_private_key(ec.SECP384R1(), default_backend())
public_key = private_key.public_key()
# 将公私钥序列化为字节串
private_key_bytes = private_key.private_bytes(encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption())
public_key_bytes = public_key.public_bytes(encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo)
# 假设Alice和Bob分别得到了对方的公钥public_key_bytes
# Alice使用自己的私钥private_key对Bob的公钥public_key_bytes进行协商
bob_public_key = serialization.load_pem_public_key(public_key_bytes, default_backend())
shared_key = private_key.exchange(ec.ECDH(), bob_public_key)
# 使用共享密钥对消息进行加密
message = b"hello world"
hkdf = HKDF(algorithm=hashes.SHA256(), length=32, salt=None, info=b'test', backend=default_backend())
key = hkdf.derive(shared_key)
iv = b'0000000000000000'
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()
ct = encryptor.update(message) + encryptor.finalize()
# Bob使用自己的私钥和Alice的公钥对共享密钥进行协商
alice_public_key = serialization.load_pem_public_key(public_key_bytes, default_backend())
shared_key = private_key.exchange(ec.ECDH(), alice_public_key)
# 使用共享密钥对消息进行解密
hkdf = HKDF(algorithm=hashes.SHA256(), length=32, salt=None, info=b'test', backend=default_backend())
key = hkdf.derive(shared_key)
iv = b'0000000000000000'
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
decryptor = cipher.decryptor()
pt = decryptor.update(ct) + decryptor.finalize()
print(pt.decode('utf-8'))
```
在这个示例中,我们首先生成了ECC公私钥对,并将公私钥序列化为字节串。然后,假设Alice和Bob分别得到了对方的公钥,Alice使用自己的私钥对Bob的公钥进行协商,得到一个共享密钥。使用共享密钥,Alice对消息进行加密,并将加密后的密文发送给Bob。Bob使用自己的私钥和Alice的公钥对共享密钥进行协商,得到相同的共享密钥,然后使用共享密钥对密文进行解密,得到原始的明文。
阅读全文