jcq消息api修改

This commit is contained in:
苏尹岚
2020-07-17 15:45:43 +08:00
parent 56995b191b
commit d8e23685bf
6 changed files with 121 additions and 110 deletions

View File

@@ -7,7 +7,6 @@ import (
"encoding/hex"
"fmt"
"io/ioutil"
"log"
"net/http"
"testing"
@@ -105,117 +104,74 @@ func TestTryGetCookie(t *testing.T) {
}
func TestAAADS(t *testing.T) {
str := "AAS2QGu5EUYo35u+GIPUbcPQrI8MbLvXIHaYS47i8I6De0Fzgdpyw7TT9Iti3RiIY30="
str := "AASWvkdk5a60bjm3lFqaoCyzU8toVp+3kKjheuOwxzWZH+adxCfv+Bv9BD0DP/WDy6Y="
data, _ := base64.StdEncoding.DecodeString(str)
dataStr := hex.EncodeToString(data)
fmt.Println("all:", dataStr)
fmt.Println("all:", dataStr) //96be4764e5aeb46e39b7945a9aa02cb3
fmt.Println("key ID:", dataStr[4:36])
fmt.Println("IV:", dataStr[36:68])
fmt.Println("key main:", dataStr[68:len(dataStr)])
data2, _ := base64.StdEncoding.DecodeString("/xdYPxcavDO9IpsJP1uFfbbuv7WdIyckhJ9RBe3h9r8=")
data2, _ := base64.StdEncoding.DecodeString("XsGNdyDyDHnR79iKU6d5LTSJYaQyWAEssDoD7VM5Kks=")
dataStr2 := hex.EncodeToString(data2)
// key := base64.StdEncoding.EncodeToString([]byte(dataStr[36:68]))
fmt.Println(SubstrByByte(dataStr[36:len(dataStr)], 16))
result, _ := AESBase64Decrypt("417381da72c3b4d3f48b62dd1888637d", dataStr2[:32], "ac8f0c6cbbd72076984b8ee2f08e837b")
fmt.Println(string(result))
}
func SubstrByByte(str string, length int) string {
bs := []byte(str)[:length]
bl := 0
for i := len(bs) - 1; i >= 0; i-- {
switch {
case bs[i] >= 0 && bs[i] <= 127:
return string(bs[:i+1])
case bs[i] >= 128 && bs[i] <= 191:
bl++
case bs[i] >= 192 && bs[i] <= 253:
cl := 0
switch {
case bs[i]&252 == 252:
cl = 6
case bs[i]&248 == 248:
cl = 5
case bs[i]&240 == 240:
cl = 4
case bs[i]&224 == 224:
cl = 3
default:
cl = 2
}
if bl+1 == cl {
return string(bs[:i+cl])
}
return string(bs[:i])
}
}
return ""
}
func DecryptDESECB(d, key []byte) string {
data, err := base64.StdEncoding.DecodeString(string(d))
fmt.Println(dataStr2)
fmt.Println(len(data2))
fmt.Println(len([]byte(string(data2))))
fmt.Println(len([]byte(dataStr[36:68])))
iv := base64.StdEncoding.EncodeToString([]byte(dataStr[36:68]))
fmt.Println(len([]byte(iv)))
fmt.Println(iv)
src := base64.StdEncoding.EncodeToString([]byte(dataStr[68:]))
fmt.Println(len([]byte(src)))
fmt.Println(string(data[18:34]))
// str2 := []byte(dataStr[68:])
// key := []byte(dataStr2)
decryptedData, err := Decrypt(data[34:50], data2, data[18:34])
if err != nil {
return ""
t.Fatal(err)
}
// data3, _ := simplifiedchinese.GBK.NewDecoder().Bytes(decryptedData) //gbk 转 utf-8
fmt.Println("data", string(decryptedData))
}
func Decrypt(decryptBytes, key, iv []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return ""
}
bs := block.BlockSize()
if len(data)%bs != 0 {
return ""
}
out := make([]byte, len(data))
dst := out
for len(data) > 0 {
block.Decrypt(dst, data[:bs])
data = data[bs:]
dst = dst[bs:]
}
out = PKCS5UnPadding(out)
return string(out)
}
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
func AESBase64Decrypt(encrypt_data string, key, iv string) (origin_data string, err error) {
var block cipher.Block
if block, err = aes.NewCipher([]byte(key)); err != nil {
log.Println(err)
return
}
encrypt := cipher.NewCBCDecrypter(block, []byte(iv))
var source []byte
if source, err = base64.RawStdEncoding.DecodeString(encrypt_data); err != nil {
log.Println(err)
return
}
var dst []byte = make([]byte, len(source))
encrypt.CryptBlocks(dst, source)
origin_data = string(PKCS5Trimming(dst))
return
}
func Decrypt(src, key, iv string) (data []byte, err error) {
decrypted := make([]byte, len(src))
var aesBlockDecrypter cipher.Block
aesBlockDecrypter, err = aes.NewCipher([]byte(key))
if err != nil {
println(err.Error())
return nil, err
}
fmt.Println(aesBlockDecrypter.BlockSize())
aesDecrypter := cipher.NewCBCDecrypter(aesBlockDecrypter, []byte(iv))
aesDecrypter.CryptBlocks(decrypted, []byte(src))
return PKCS5Trimming(decrypted), nil
fmt.Println(block.BlockSize())
blockMode := cipher.NewCBCDecrypter(block, iv)
decrypted := make([]byte, len(decryptBytes))
blockMode.CryptBlocks(decrypted, decryptBytes)
fmt.Println(decrypted)
decrypted = PKCS5UnPadding(decrypted)
return decrypted, nil
}
func PKCS5Trimming(encrypt []byte) []byte {
padding := encrypt[len(encrypt)-1]
return encrypt[:len(encrypt)-int(padding)]
func PKCS5UnPadding(decrypted []byte) []byte {
length := len(decrypted)
unPadding := int(decrypted[length-1])
return decrypted[:(length - unPadding)]
}
func CBCDecript(key, iv, src []byte) (dst []byte, err error) {
var (
block cipher.Block
blockMode cipher.BlockMode
)
if len(iv) != aes.BlockSize {
return nil, fmt.Errorf("iv")
}
if len(key) != 32 {
return nil, fmt.Errorf("key")
}
if block, err = aes.NewCipher(key); err != nil {
return nil, err
}
blockMode = cipher.NewCBCDecrypter(block, iv)
dst = make([]byte, len(src))
blockMode.CryptBlocks(dst, src)
dst = PKCS5UnPadding(dst)
return
}