使用crypto/aes进行AES对称加密,需选择CBC模式并生成随机IV,加密时填充密文并使用NewCBCEncrypter,解密时用NewCBCDecrypter还原明文。

在Golang中,crypto包提供了多种加密算法的实现,可用于数据安全保护。要正确使用它,需根据具体需求选择合适的子包,如AES对称加密、RSA非对称加密或生成哈希值等。
使用crypto/aes进行对称加密
AES(高级加密标准)是常用的对称加密方式,加密和解密使用相同密钥。
以下是使用CBC模式进行AES加密的示例:
package mainimport ( "crypto/aes" "crypto/cipher" "crypto/rand" "io")func encrypt(plaintext []byte, key []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } ciphertext := make([]byte, aes.BlockSize+len(plaintext)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return nil, err } stream := cipher.NewCBCEncrypter(block, iv) stream.CryptBlocks(ciphertext[aes.BlockSize:], plaintext) return ciphertext, nil}func decrypt(ciphertext []byte, key []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } if len(ciphertext) < aes.BlockSize { return nil, err } iv := ciphertext[:aes.BlockSize] ciphertext = ciphertext[aes.BlockSize:] stream := cipher.NewCBCDecrypter(block, iv) stream.CryptBlocks(ciphertext, ciphertext) return ciphertext, nil}
注意:密钥长度必须是16、24或32字节(对应AES-128、AES-192、AES-256)。
立即学习“go语言免费学习笔记(深入)”;
使用crypto/rsa进行非对称加密
RSA适合加密小量数据或传输对称密钥。
生成密钥对并加密示例:
package mainimport ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem")// 生成RSA私钥func generatePrivateKey() (*rsa.PrivateKey, error) { return rsa.GenerateKey(rand.Reader, 2048)}// 导出为PEM格式func encodePrivateKey(key *rsa.PrivateKey) []byte { privBytes := x509.MarshalPKCS1PrivateKey(key) return pem.EncodeToMemory(&pem.Block{ Type: "RSA PRIVATE KEY", Bytes: privBytes, })}// 使用公钥加密func encryptWithPublicKey(msg []byte, pub *rsa.PublicKey) ([]byte, error) { return rsa.EncryptPKCS1v15(rand.Reader, pub, msg)}// 使用私钥解密func decryptWithPrivateKey(ciphertext []byte, priv *rsa.PrivateKey) ([]byte, error) { return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext)}
实际使用中,通常结合对称与非对称加密,例如用RSA加密AES密钥。
使用crypto/sha256生成哈希值
SHA-256常用于数据完整性校验。
package mainimport ( "crypto/sha256" "fmt")func hashData(data []byte) []byte { h := sha256.Sum256(data) return h[:]}// 示例func main() { data := []byte("hello world") hash := hashData(data) fmt.Printf("%xn", hash) // 输出十六进制哈希}
该操作不可逆,适用于密码哈希存储(但建议使用bcrypt或scrypt增强安全性)。
基本上就这些。根据场景选择合适算法,注意密钥管理与初始化向量(IV)的随机性,避免重复使用IV,确保加密安全性。
以上就是如何在Golang中使用crypto包进行加密的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1411081.html
微信扫一扫
支付宝扫一扫