公钥密码学理论与代码实战:对称 & 非对称加密终极指南

·

用浅显的语言、清晰的结构,带你彻底搞懂 对称加密非对称加密(RSA、ECC、AES、3DES),并附 Go 语言完整可运行源码。

目录


对称加密 VS 非对称加密

关键词:对称加密非对称加密密钥数量
对称1 把密钥同时用于加解密极快、适合大数据
非对称公钥加密,私钥解密(反之亦可签名)算法复杂、慢,但无需预先共享密钥

在区块链、Web3、支付通道等高并发场景下,“快”与“秘密分发”这两件事几乎不可能由同一把钥匙解决,于是 “混合加密” 诞生:用非对称方式协商或包裹对称密钥,再用对称密钥做高速数据加解密。


对称加密三大经典算法

DES:最短但已淘汰

// 核心就这句
block, err := des.NewCipher(key)

👉 向代码爱好者展示如何在 10 行内完成 DES/CBC 加解密

FAQ ① DES 真的不能用了吗?
DES 只作为历史教材;生产环境请用 AES-256 或 ChaCha20-Poly1305。

3DES:过渡缓冲

AES:现世代王者

block, _ := aes.NewCipher(key)
// AES-CBC 加解密套路完全与 DES 类似,只是 Padding 换 pkcs7

FAQ ② 为什么区块链钱包里几乎不用 AES?
钱包更关注身份和数据签名,因此偏向非对称密钥体系。但在链下存储私钥 Keystore 时,AES 常被用来加密本地文件。


非对称加密全景

RSA:教科书式算法

// 2048 bit ≈ 256 bytes,密钥生成
privKey, _ := rsa.GenerateKey(rand.Reader, 2048)

👇 实战小贴士
RSA 的“计算密集”特征让它更适合加密 对称密钥 Sealed Key(仅几十字节),而不是整条消息。

椭圆曲线 ECC:用短钥匙换高安全

FAQ ③ ECC 的私钥怎么存储?
私钥就是一个 32-byte 随机数:

sk := make([]byte, 32)
rand.Read(sk)
hex.EncodeToString(sk) // 输出直接作为助记词

混合加密:真实世界唯一解

  1. “先握手,再说话”

    • 客户端→服务器:公钥加密 256-bit AES 密钥
    • 后续数据流量全用 AES 处理,速度翻倍
  2. “先用公钥验证服务器身份,再协商对称密钥”

    • 即 TLS 握手全过程
  3. 区块链节点间的 p2p 加密


代码实战对照表

算法标准库函数推荐模式速度等级
DESdes.NewCipherCBC历史演示
3DESdes.NewTripleDESCipherCBC中等
AES-128aes.NewCipherCBC/GCM
RSArsa.GenerateKeyOAEP/PSS只做“钥匙交换+签名”
ECC/ECDSAecdsa.GenerateKeyed25519.GenerateKeyECDSA/EdDSA

快速 FAQ

QA
我的日常聊天真的用得到非对称加密吗?微信、Signal 到 HTTPS,所有端到端加密都在用混合模型,只是你看不见。
AES-128 vs AES-256,哪个更划算?如果 CPU 支持 AES-NI,256 bit 几乎无性能损耗。保密要求极高场景直接上 256。
把私钥存云端安全吗?别存裸钥。应使用 加密 Keystore(AES+用户口令)硬件钱包 储存。
我还能扛多久 RSA-1024?现已停止支持。NIST 明确 2024 后淘汰 RSA ≤ 2048 bit,改上 ECDSA / EdDSA。
怎样用 1 句话向老板解释混合加密?“把法拉利(对称)锁进装甲车(非对称),既快又保险。”

总结

按着上面的代码跑一遍,你会发现:原文与密文之间,其实只差一条优雅的 密钥链 而已。