使用go来做加密解密文件或者字符串
你可以使用 Linux 命令行中的 openssl
或 gpg
进行加密,然后在 Go 程序中使用相关的库来解密。
方案 1: 使用 OpenSSL 进行加密,Go 程序解密
1. 命令行加密
使用 openssl
在命令行中对 token 进行加密,并保存加密结果:
echo -n "your_token" | openssl enc -aes-256-cbc -a -salt -pass pass:your_password > encrypted_token.txt
your_token
: 要加密的 token。aes-256-cbc
: 加密算法。your_password
: 加密时使用的密码。-a
: 使用 base64 编码输出。
这会将加密后的数据保存到 encrypted_token.txt
文件中。
2. Go 程序解密
在 Go 中,可以使用 crypto/aes
和 crypto/cipher
包来解密 openssl
生成的加密数据。
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/sha256"
"encoding/base64"
"fmt"
"io/ioutil"
"log"
)
func main() {
// 从文件中读取加密的 token
encryptedData, err := ioutil.ReadFile("encrypted_token.txt")
if err != nil {
log.Fatalf("Failed to read encrypted file: %v", err)
}
// base64 解码
ciphertext, err := base64.StdEncoding.DecodeString(string(encryptedData))
if err != nil {
log.Fatalf("Failed to decode base64: %v", err)
}
// 定义密码并生成密钥 (与加密时的密码相同)
password := "your_password"
key := sha256.Sum256([]byte(password)) // 256-bit 密钥
// 初始化解密器
block, err := aes.NewCipher(key[:])
if err != nil {
log.Fatalf("Failed to create cipher: %v", err)
}
// 获取 IV (前 16 字节)
iv := ciphertext[:aes.BlockSize]
ciphertext = ciphertext[aes.BlockSize:]
// 使用 CBC 模式进行解密
mode := cipher.NewCBCDecrypter(block, iv)
mode.CryptBlocks(ciphertext, ciphertext)
// 去除填充(PKCS7 Padding)
plaintext := string(ciphertext)
fmt.Println("Decrypted Token:", plaintext)
}
总结
- OpenSSL 方案使用
crypto/aes
相关库在 Go 中解密。