go里面常用的加密功能

来源:赵克立博客 分类: Go 标签:GO发布时间:2026-06-23 11:25:41最后更新:2026-06-23 11:49:22浏览:13
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2026-06-23 11:49:22
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

HMAC-SHA256

func sha256HMAC(key []byte, data []byte) string {
	mac := hmac.New(sha256.New, key)
	mac.Write(data)
	return fmt.Sprintf("%x", mac.Sum(nil))
}

MD5

fmt.Sprintf("%x", md5.Sum([]byte(signStr)))

AES+CBC+PKCS7

func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
    padding := blockSize - len(ciphertext)%blockSize
    padText := bytes.Repeat([]byte{byte(padding)}, padding)
    return append(ciphertext, padText...)
}

func PKCS7UnPadding(origData []byte) []byte {
    length := len(origData)
    unpadding := int(origData[length-1])
    return origData[:(length - unpadding)]
}

func AesEncryptCBC(orig string, key, iv string) string {
    origData := []byte(orig)
    k := []byte(key)

    block, _ := aes.NewCipher(k)

    blockSize := block.BlockSize()

    origData = PKCS7Padding(origData, blockSize)

    ivCopy := []byte(iv)
    blockMode := cipher.NewCBCEncrypter(block, ivCopy[:blockSize])

    cryted := make([]byte, len(origData))

    blockMode.CryptBlocks(cryted, origData)
    return base64.StdEncoding.EncodeToString(cryted)
}

func AesDecryptCBC(cryted string, key, iv string) string {
    crytedByte, _ := base64.StdEncoding.DecodeString(cryted)
    k := []byte(key)

    block, _ := aes.NewCipher(k)

    blockSize := block.BlockSize()

    ivCopy := []byte(iv)
    blockMode := cipher.NewCBCDecrypter(block, ivCopy[:blockSize])

    orig := make([]byte, len(crytedByte))

    blockMode.CryptBlocks(orig, crytedByte)

    orig = PKCS7UnPadding(orig)
    return string(orig)
}



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python