在Go语言中,有多种方法可以实现文件加密。这里,我将向您介绍两种常用的加密方法:AES加密和使用Go内置的crypto/aes包进行加密。
AES(Advanced Encryption Standard)是一种对称加密算法,它使用相同的密钥进行加密和解密。在Go语言中,可以使用crypto/aes
和crypto/cipher
包来实现AES加密。
以下是一个简单的AES加密示例:
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"encoding/base64"
"fmt"
"io"
"os"
)
func main() {
key := []byte("0123456789abcdef") // 16字节的密钥,对应AES-128
plaintext := []byte("Hello, World!")
ciphertext, err := encryptAES(key, plaintext)
if err != nil {
fmt.Println("Error encrypting:", err)
return
}
fmt.Printf("Encrypted text: %s\n", base64.StdEncoding.EncodeToString(ciphertext))
}
func encryptAES(key, plaintext []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
nonce := make([]byte, aes.BlockSize)
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
return nil, err
}
aesGCM, err := cipher.NewGCM(block)
if err != nil {
return nil, err
}
ciphertext := aesGCM.Seal(nil, nonce, plaintext, nil)
return append(nonce, ciphertext...), nil
}
Go 1.16版本引入了crypto/aes
包,它提供了一种更简单的方法来实现AES加密。以下是一个使用crypto/aes
包进行加密的示例:
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"encoding/base64"
"fmt"
"io"
"os"
)
func main() {
key := []byte("0123456789abcdef") // 16字节的密钥,对应AES-128
plaintext := []byte("Hello, World!")
ciphertext, err := encrypt(key, plaintext)
if err != nil {
fmt.Println("Error encrypting:", err)
return
}
fmt.Printf("Encrypted text: %s\n", base64.StdEncoding.EncodeToString(ciphertext))
}
func encrypt(key, plaintext []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
aesGCM, err := cipher.NewGCM(block)
if err != nil {
return nil, err
}
nonce := make([]byte, aesGCM.NonceSize())
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
return nil, err
}
ciphertext := aesGCM.Seal(nil, nonce, plaintext, nil)
return append(nonce, ciphertext...), nil
}
这两种方法都可以实现AES加密,您可以根据自己的需求选择合适的方法。注意,为了确保加密后的数据安全,请妥善保管密钥。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。