jcq消费消息
This commit is contained in:
@@ -2,14 +2,14 @@ package jdshopapi
|
||||
|
||||
import (
|
||||
"crypto/aes"
|
||||
"crypto/md5"
|
||||
"crypto/cipher"
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"math"
|
||||
"log"
|
||||
"net/http"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
)
|
||||
@@ -105,19 +105,51 @@ func TestTryGetCookie(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAAADS(t *testing.T) {
|
||||
const prefix = 80
|
||||
const randPartNum = 100
|
||||
orderNoBeginTimestamp := utils.Str2Time("2010-01-01 00:00:00").Unix()
|
||||
orderNo := time.Now().Unix() - orderNoBeginTimestamp
|
||||
orderNo = orderNo * randPartNum
|
||||
md5Bytes := md5.Sum([]byte(utils.GetUUID()))
|
||||
randPart := 0
|
||||
for k, v := range md5Bytes {
|
||||
randPart += int(v) << ((k % 3) * 8)
|
||||
str := "AAS2QGu5EUYo35u+GIPUbcPQrI8MbLvXIHaYS47i8I6De0Fzgdpyw7TT9Iti3RiIY30="
|
||||
data, _ := base64.StdEncoding.DecodeString(str)
|
||||
dataStr := hex.EncodeToString(data)
|
||||
fmt.Println("all:", dataStr)
|
||||
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=")
|
||||
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])
|
||||
}
|
||||
}
|
||||
orderNo += int64(randPart % randPartNum)
|
||||
orderNo += int64(math.Pow10(int(math.Log10(float64(orderNo)))+1)) * prefix
|
||||
fmt.Println(orderNo)
|
||||
return ""
|
||||
}
|
||||
|
||||
func DecryptDESECB(d, key []byte) string {
|
||||
@@ -149,3 +181,41 @@ func PKCS5UnPadding(origData []byte) []byte {
|
||||
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
|
||||
}
|
||||
|
||||
func PKCS5Trimming(encrypt []byte) []byte {
|
||||
padding := encrypt[len(encrypt)-1]
|
||||
return encrypt[:len(encrypt)-int(padding)]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user