在对称加密算法中,AES-GCM 和 3DES 是两种综合性能和历史都算有代表性的算法。本文将从安全性、性能、应用场景等综合综吁解析,全面对比这两种对称加密算法。
属性 | AES-GCM | 3DES |
---|---|---|
加密方式 | 块加密 + 认证 (AEAD) | 三次 DES 加密 |
块大小 | 128 位 | 64 位 |
密钥长度 | 128/192/256 位 | 112/168 位 |
加密模式 | GCM (带认证) | CBC, ECB (不带认证) |
是否认证加密 | 是 | 否 |
性能 | 很快(有硬件加速) | 慢(需三次加密) |
安全性 | 高 | 弱(已有攻击方法) |
推荐状态 | 强烈推荐 | 已弃用 |
适合平台 | 环境新,Web/API/TLS | 遗留系统/经典程序 |
测试条件 | AES-GCM | 3DES |
---|---|---|
有 AES-NI 硬件加速 | 1~3 GB/s | 10~20 MB/s |
无硬件加速 | 300~500 MB/s | 5~10 MB/s |
并行支持 | 是 | 否 |
AES-GCM 是现代硬件上最快的加密方案之一,适合大量数据处理。
场景 | 推荐算法 |
---|---|
Web / API 数据传输 | AES-GCM |
TLS / HTTPS / VPN | AES-GCM |
本地文件加密 | AES-GCM |
遥程设备 / 移动端 | ChaCha20-Poly1305 |
老经程序选择 | 3DES (COPAT ONLY) |
Go 标准库对 AES-GCM 提供了良好支持。以下是一个完整示例,演示如何进行加密与解密:
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"fmt"
"io"
)
func encryptAESGCM(plaintext, key []byte) ([]byte, []byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, nil, fmt.Errorf("create cipher: %w", err)
}
aesGCM, err := cipher.NewGCM(block)
if err != nil {
return nil, nil, fmt.Errorf("GCM mode: %w", err)
}
nonce := make([]byte, aesGCM.NonceSize())
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
return nil, nil, fmt.Errorf("generate nonce: %w", err)
}
ciphertext := aesGCM.Seal(nil, nonce, plaintext, nil)
return ciphertext, nonce, nil
}
func decryptAESGCM(ciphertext, key, nonce []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, fmt.Errorf("create cipher: %w", err)
}
aesGCM, err := cipher.NewGCM(block)
if err != nil {
return nil, fmt.Errorf("GCM mode: %w", err)
}
plaintext, err := aesGCM.Open(nil, nonce, ciphertext, nil)
if err != nil {
return nil, fmt.Errorf("decryption failed: %w", err)
}
return plaintext, nil
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。