正在显示
3 个修改的文件
包含
123 行增加
和
0 行删除
common/aes_encryption.go
0 → 100644
1 | +package common | ||
2 | + | ||
3 | +import ( | ||
4 | + "bytes" | ||
5 | + "crypto/aes" | ||
6 | + "crypto/cipher" | ||
7 | + "encoding/base64" | ||
8 | +) | ||
9 | + | ||
10 | +func Aes_CBC_Decrypt(crypted []byte, key, iv []byte) ([]byte, error) { | ||
11 | + block, err := aes.NewCipher(key) | ||
12 | + if err != nil { | ||
13 | + return nil, err | ||
14 | + } | ||
15 | + blockMode := cipher.NewCBCDecrypter(block, iv) | ||
16 | + origData := make([]byte, len(crypted)) | ||
17 | + blockMode.CryptBlocks(origData, crypted) | ||
18 | + origData = unpadding(origData) | ||
19 | + return origData, nil | ||
20 | +} | ||
21 | + | ||
22 | +func unpadding(cipherText []byte) []byte { | ||
23 | + end := cipherText[len(cipherText)-1] | ||
24 | + cipherText = cipherText[:len(cipherText)-int(end)] | ||
25 | + | ||
26 | + return cipherText | ||
27 | +} | ||
28 | + | ||
29 | +func Aes_CBC_Encrypt(data []byte, key, iv []byte) (string, error) { | ||
30 | + block, err := aes.NewCipher(key) | ||
31 | + if err != nil { | ||
32 | + return "", err | ||
33 | + } | ||
34 | + origData := padding([]byte(data), block.BlockSize()) | ||
35 | + println("block ", block.BlockSize()) | ||
36 | + println("block2 ", len(iv)) | ||
37 | + blockMode := cipher.NewCBCEncrypter(block, iv) | ||
38 | + crypted := make([]byte, len(origData)) | ||
39 | + blockMode.CryptBlocks(crypted, origData) | ||
40 | + return base64.StdEncoding.EncodeToString(crypted), nil | ||
41 | +} | ||
42 | + | ||
43 | +func padding(plainText []byte, blockSize int) []byte { | ||
44 | + n := blockSize - len(plainText)%blockSize | ||
45 | + temp := bytes.Repeat([]byte{byte(n)}, n) | ||
46 | + plainText = append(plainText, temp...) | ||
47 | + | ||
48 | + return plainText | ||
49 | +} |
common/rsa_encryption.go
0 → 100644
1 | +package common | ||
2 | + | ||
3 | +import ( | ||
4 | + "crypto" | ||
5 | + "crypto/md5" | ||
6 | + "crypto/rand" | ||
7 | + "crypto/rsa" | ||
8 | + "crypto/x509" | ||
9 | + "encoding/base64" | ||
10 | + "encoding/pem" | ||
11 | +) | ||
12 | + | ||
13 | +func RsaSignWithMd5Hex(data string, prvKey string) (string, error) { | ||
14 | + block, _ := pem.Decode([]byte(prvKey)) | ||
15 | + privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes) | ||
16 | + if err != nil { | ||
17 | + privateKey, err = x509.ParsePKCS1PrivateKey(block.Bytes) | ||
18 | + if err != nil { | ||
19 | + return "", err | ||
20 | + } | ||
21 | + } | ||
22 | + md5 := md5.New() | ||
23 | + md5.Write([]byte(data)) | ||
24 | + hash := md5.Sum(nil) | ||
25 | + signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey.(*rsa.PrivateKey), crypto.MD5, hash[:]) | ||
26 | + if err != nil { | ||
27 | + return "", err | ||
28 | + } | ||
29 | + out := base64.StdEncoding.EncodeToString(signature) | ||
30 | + return out, nil | ||
31 | +} |
order_client.go
0 → 100644
1 | +package socialwork_sdk | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "log" | ||
6 | + "socialwork-sdk/common" | ||
7 | +) | ||
8 | + | ||
9 | +type OrderClient struct { | ||
10 | + Key string `json:"key"` | ||
11 | + IV string `json:"iv"` | ||
12 | + PublicKey string `json:"public_key"` | ||
13 | + CustomerPrivateKey string `json:"customer_private_key"` | ||
14 | +} | ||
15 | + | ||
16 | +func NewOrderClient(key, iv, customerPrivateKey, publicKey string) *OrderClient { | ||
17 | + return &OrderClient{ | ||
18 | + Key: key, | ||
19 | + IV: iv, | ||
20 | + PublicKey: publicKey, | ||
21 | + CustomerPrivateKey: customerPrivateKey, | ||
22 | + } | ||
23 | +} | ||
24 | + | ||
25 | +func (o *OrderClient) EncryptAndSign(res interface{}) (string, string, error) { | ||
26 | + bs, _ := json.Marshal(res) | ||
27 | + cipherText, err := common.Aes_CBC_Encrypt(bs, []byte(o.Key), []byte(o.IV)) | ||
28 | + if err != nil { | ||
29 | + log.Printf("Aes_CBC_Encrypt.failed.err=%v\n", err) | ||
30 | + return "", "", err | ||
31 | + } | ||
32 | + | ||
33 | + sign, err := common.RsaSignWithMd5Hex(cipherText, o.CustomerPrivateKey) | ||
34 | + if err != nil { | ||
35 | + log.Printf("RsaSignWithMd5Hex.failed.err=%v\n", err) | ||
36 | + return "", "", err | ||
37 | + } | ||
38 | + return cipherText, sign, nil | ||
39 | +} | ||
40 | + | ||
41 | +func (o *OrderClient) PrintVersion() string { | ||
42 | + return "1.0" | ||
43 | +} |
请
注册
或
登录
后发表评论