首页 > 其他分享 >使用go来做加密解密文件或者字符串

使用go来做加密解密文件或者字符串

时间:2024-09-12 11:15:08浏览次数:1  
标签:aes 加密 err 解密 token go ciphertext

你可以使用 Linux 命令行中的 opensslgpg 进行加密,然后在 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/aescrypto/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 中解密。

标签:aes,加密,err,解密,token,go,ciphertext
From: https://www.cnblogs.com/jasmine456/p/18409815

相关文章

  • 使用java程序对字符串进行加密
    程序功能程序的功能是对用户输入的字符串,使用常见的三种加密算法(MD5、SHA-1和SHA-256)进行加密,并输出每种算法加密后的结果。主要步骤包括:用户通过控制台输入一个字符串。程序使用MessageDigest类,对输入的字符串分别进行MD5、SHA-1和SHA-256算法的加密处理。每......
  • Go操作nats的jetstream
    先搭建nats集群version:"3.5"services:nats:image:natsports:-"8222:8222"-"4222:4222"-"6222:6222"command:"--cluster_nameNATS--clusternats://0.0.0.0:6222--http_port82......
  • 锋哥写一套前后端分离Python权限系统 基于Django5+DRF+Vue3.2+Element Plus+Jwt 视频
    大家好,我是java1234_小锋老师,最近写了一套【前后端分离Python权限系统基于Django5+DRF+Vue3.2+ElementPlus+Jwt】视频教程,持续更新中,计划月底更新完,感谢支持。视频在线地址:打造前后端分离Python权限系统基于Django5+DRF+Vue3.2+ElementPlus+Jwt视频教程(火爆连载更新中......
  • Python毕业设计基于Django的 校园菜鸟驿站管理系统
    文末获取资源,收藏关注不迷路文章目录一、项目介绍二、主要使用技术三、研究内容四、核心代码五、文章目录一、项目介绍首先,以需求为依据,根据需求分析结果进行了系统的设计,并将其划分为管理员和用户二种角色和多个主要模块:用户、快递类型、快递信息、取件信息等。......
  • Python毕业设计基于Django的毕业设计选题管理系统
    文末获取资源,收藏关注不迷路文章目录一、项目介绍二、主要使用技术三、研究内容四、核心代码五、文章目录一、项目介绍本文讲述了毕业设计选题管理系统。结合电子管理系统的特点,分析了毕业设计选题管理系统的背景,给出了毕业设计选题管理系统实现的设计方案。本论......
  • 2024-09-11:用go语言,给定一个从0开始的整数数组nums和一个正奇数整数k, 要求在nums数组
    2024-09-11:用go语言,给定一个从0开始的整数数组nums和一个正奇数整数k,要求在nums数组中选择k个不重叠的子数组,使得这些子数组的能量值之和最大。子数组的能量值是通过一定规则计算得到的,具体规则是对于某个子数组,将其每个元素乘以一个特定系数,并将这些结果相加,系数随着元素在子数组......
  • flask+python抗洪救灾管理系统 2rucy-django毕业设计项目
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • django基于web的团员信息管理系统
    django基于web的团员信息管理系统。开发技术:Python语言;django框架;mysql数据库。项目内容:本系统分为四部分,别是团员、班级、院系、管理员。团员信息管理系统具有注册登录、个人中心、院系管理、班级管理、团员管理、团队活动管理、公告信息管理、系统日志管理、活动信息管......
  • AdaBoost算法(AdbBoost Algorithm)—有监督学习方法、非概率模型、判别模型、非线性模型
    定义输入:训练数据集T={(x1......
  • Go runtime 调度器精讲(二):调度器初始化
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言上一讲介绍了Go程序初始化的过程,这一讲继续往下看,进入调度器的初始化过程。接着上一讲的执行过程,省略一些不相关的代码,执行到runtime/asm_amd64.s:rt0_go:343L:(dlv)siasm_amd64.s:3430x45431c*8b442418......