Go重构Java数据加密方法(AES/ECB/PKCS7,AES/CBC加密)

最近和合作厂商对接的时候,数据需要加密传输,响应数据需要再解密获取,由于我司使用的是Golang,而合作商使用的是Java,所以加密方法需要重构.

直接上代码(utils.go)

package libs

import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
	"crypto/hmac"
	"crypto/md5"
	"crypto/sha256"
	"encoding/hex"
	"errors"
	"fmt"
	"sort"
	"strings"
)

// 签名加密
func Sign(sysParam map[string]string, busParam string, method string, key string) (string, error) {
	if len(sysParam) == 0 || sysParam == nil {
		return "", errors.New("sysParam Valid")
	}
	if method == "HmacSHA256" {
		// 生成加密参数
		decodeHexKey, _ := DecodeHexUpper(key)
		busContent := EncodeAES256HexUpper(busParam, decodeHexKey)
		return signWithSHA256(sysParam, busContent, key), nil
	} else if method == "RSAWithMD5" {
		return signWithRSA(sysParam, busParam, key), nil
	} else {
		return "", errors.New("method 	Valid")
	}
}

// sha256方法加密
func signWithSHA256(sysParam map[string]string, busParam string, key string) string {
	if len(busParam) > 0 && busParam != "" && len(strings.TrimSpace(busParam)) > 0 {
		sysParam["content"] = busParam
	}
	var keys []string
	for k := range sysParam {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	buf := make([]string, 200)
	buf = append(buf, key)
	for _, v := range keys {
		if !strings.EqualFold("sign", v) {
			sysVal := v + sysParam[v]
			buf = append(buf, sysVal)
		}
	}
	buf = append(buf, key)
	newString := ""
	for _, v := range buf {
		newString += fmt.Sprintf("%s", v)
	}
	newKey, _ := DecodeHexUpper(key)
	retStr := encodeHmacSHA256HexUpper(n
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值