ECIES 加密——示例
现在演示如何在 Python 中实际使用 ECIES 加密方案。我们将使用 Python 库 eciespy:
pip install eciespy
下面的 Python 示例代码用于生成公私密钥对,并使用 ECIES 加密和解密消息:
from ecies.utils import generate_eth_key
from ecies import encrypt, decrypt
import binascii
privKey = generate_eth_key()
privKeyHex = privKey.to_hex()
pubKeyHex = privKey.public_key.to_hex()
print("Encryption public key:", pubKeyHex)
print("Decryption private key:", privKeyHex)
plaintext = b'Some plaintext for encryption'
print("Plaintext:", plaintext)
encrypted = encrypt(pubKeyHex, plaintext)
print("Encrypted:", binascii.hexlify(encrypted))
decrypted = decrypt(privKeyHex, encrypted)
print("Decrypted:", decrypted)
运行上述代码示例:https://repl.it/@nakov/ECIES-in-Python。
上述代码非常简单:只需使用 ecies.utils.generate_eth_key() 生成 ECC 公钥 + 私钥对,然后调用 eciespy 库中的 ecies.encrypt(pubKey, msg) 和 decrypt(privKey, encryptedMsg) 函数。
上述代码的输出如下:
Encryption public key: 0x0dc8e06c055b45ecf110258ed5c0261ce2019b1bd0f8f226dcd010dade448b8f304a0915c68cdf7ddded8e4021d28fb92e27d08df695f48a0d2c41ddee750fc7
Decryption private key: 0x487fd8b53c471e3c38484a0fbe4751ace67a9ed28e60ea6b0b44c445b881f99d
Plaintext: b'Some plaintext for encryption'
Encrypted: b'045699078bbd101e270572d0d68e87a8f7b6cc377ebeeffb60d2fcac5dc7bdd86a26d7f79d13b92e923a0e2cdbe418a7856b27157ef150d5c72f4f8f312467d13221ebe7049b7ed2f0ed253bce13117129a7b01bb881b8dfbf004ff11f3ebed4c732744bc49ea03230c2d1b2ec80774e79c075431d2019464d3de97ceb96'
Decrypted: b'Some plaintext for encryption'
Python eciespy 库内部使用基于 secp256k1 曲线的 ECC 密码学 + AES-256-GCM 认证加密。请注意,上述加密消息同时包含 4 个值:{cipherPubKey, AES-nonce, authTag, AES-ciphertext},它们以二进制形式打包,无法从上述输出中直接看出。