(八)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
}
}