密码学入门区块链中的密码学原理大家好我是欧阳瑞Rich Own。今天想和大家聊聊密码学这个重要话题。作为一个Web3探索者密码学是区块链的基础。今天就来分享一下区块链中常用的密码学原理。为什么密码学很重要场景说明身份认证验证用户身份数据加密保护敏感数据数字签名验证数据完整性零知识证明无需泄露信息证明哈希函数什么是哈希函数哈希函数将任意长度的数据转换为固定长度的哈希值。特性特性说明确定性相同输入产生相同输出单向性无法从哈希值还原输入抗碰撞难以找到两个不同输入产生相同哈希常用哈希函数import hashlib # SHA-256 hash hashlib.sha256(bHello World).hexdigest() print(hash) # Keccak-256 (以太坊使用) from Crypto.Hash import keccak k keccak.new(digest_bits256) k.update(bHello World) print(k.hexdigest())数字签名ECDSA签名from ecdsa import SigningKey, VerifyingKey, NIST256p # 生成密钥对 sk SigningKey.generate(curveNIST256p) vk sk.get_verifying_key() # 签名 message bHello World signature sk.sign(message) # 验证 assert vk.verify(signature, message)EdDSA签名from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey # 生成密钥对 private_key Ed25519PrivateKey.generate() public_key private_key.public_key() # 签名 message bHello World signature private_key.sign(message) # 验证 public_key.verify(signature, message)非对称加密from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization, hashes # 生成密钥对 private_key rsa.generate_private_key(public_exponent65537, key_size2048) public_key private_key.public_key() # 加密 message bSecret message ciphertext public_key.encrypt( message, padding.OAEP( mgfpadding.MGF1(algorithmhashes.SHA256()), algorithmhashes.SHA256(), labelNone ) ) # 解密 plaintext private_key.decrypt( ciphertext, padding.OAEP( mgfpadding.MGF1(algorithmhashes.SHA256()), algorithmhashes.SHA256(), labelNone ) )零知识证明zk-SNARKs# 简化示例 class ZKProof: def __init__(self, secret): self.secret secret def prove(self): # 生成证明 commitment hash(self.secret) challenge hash(commitment) response self.secret challenge return (commitment, response) def verify(commitment, response): challenge hash(commitment) return hash(response - challenge) commitment实战案例区块链交易签名from ecdsa import SigningKey, NIST256p import hashlib class Transaction: def __init__(self, sender, receiver, amount): self.sender sender self.receiver receiver self.amount amount def sign(self, private_key): data f{self.sender}{self.receiver}{self.amount} hash_data hashlib.sha256(data.encode()).digest() return private_key.sign(hash_data) def verify_signature(self, public_key, signature): data f{self.sender}{self.receiver}{self.amount} hash_data hashlib.sha256(data.encode()).digest() return public_key.verify(signature, hash_data)总结密码学是区块链的基石。从哈希函数到零知识证明密码学保证了区块链的安全性和可靠性。我的鬃狮蜥Hash对密码学也有自己的理解——它总是用独特的方式标记自己的领地这也许就是自然界的数字签名吧如果你对密码学感兴趣欢迎留言交流我是欧阳瑞极客之路永无止境技术栈密码学 · 哈希函数 · 数字签名 · 区块链