(八)AES和RSA加解密,附GO语言AES解密代码

本文介绍了如何解析AES加密的网站数据,涉及AES CBC模式、PKCS7填充和特定的IV。提供了Go语言的AES解密代码实例,包括AESKey获取和解密过程。同时提到了RSA算法作为对比,但主要焦点在AES的使用上。
摘要由CSDN通过智能技术生成

(八)AES和RSA加解密,附GO语言AES解密代码

​ 在(学习)爬某网站时发现欸?怎么被加密了?于是…

​ 关于AES、RSA算法看这:https://blog.csdn.net/LC_Liangchao/article/details/121769279,其实当场查资料的时候,看到一篇很好很全的介绍,可惜我又没收藏保存,啊一定要养成变做变记录的习惯。

​ AES在线解密:https://the-x.cn/zh-cn/cryptography/Aes.aspx

两篇关于某勾新升级安全策略的分析:

https://blog.csdn.net/weixin_34418993/article/details/123480178

https://zhuanlan.zhihu.com/p/496161269

总结一下:返回数据使用AES加密,密钥aesKey在Storage–>Session Storage可以拿到。AES加密模式CBC,填充方式pkcs7padding,数据块256bit,偏移量iv固定为c558Gq0YQK2QUlMc 。具体加密函数可以在main.js中搜索aseKey查看。

go语言代码:

package main

import (
	"crypto/aes"
	"crypto/cipher"
	"encoding/base64"
	"errors"
	"fmt"
	"io/ioutil"
	"math"
	"math/rand"
	"time"
)

var(
	aesKey="TQJRuMYPm6MR=mzwc/amPD+xpzhvMLsu" //aesKey
	iv="c558Gq0YQK2QUlMc"  //偏移量
)


func generateAesKey()string{
	e:="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
	r:=""
	rand.Seed(time.Now().Unix())
	for n:=0;n<32;n++{
		i:=int(math.Floor(rand.Float64()*float64(len(e))))
		r=r+e[i:i+1]
	}
	return r
}


func parseAes()error{
	//aesKey=generateAesKey()
	fmt.Println(aesKey)
	block,err:=aes.NewCipher([]byte(aesKey))
	if err!=nil{
		return err
	}
	size:=block.BlockSize()
	blockMode:=cipher.NewCBCDecrypter(block,[]byte(iv)[:size])

	encryptedData,_:=ioutil.ReadFile("aes/encrypt_data")
	n,err:=base64.RawStdEncoding.Decode(encryptedData,encryptedData)
	if err!=nil{
		return err
	}
	fmt.Println(n)

	encryptedData=encryptedData[:n]
	originData:=make([]byte,len(encryptedData))
	blockMode.CryptBlocks(originData,encryptedData)

	//去除填充字符串
	originData, err = PKCS7UnPadding1(originData)
	if err != nil {
		return err
	}

	fmt.Println(string(originData))
	return nil
}

func main(){
	err:=parseAes()
	if err!=nil{
		fmt.Println(err)
	}
}

func PKCS7UnPadding1(origData []byte) ([]byte, error) {
	//获取数据长度
	length := len(origData)
	if length == 0 {
		return nil, errors.New("加密字符串错误!")
	} else {
		//获取填充字符串长度
		unpadding := int(origData[length-1])
		//截取切片,删除填充字节,并且返回明文
		return origData[:(length - unpadding)], nil
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值