zoukankan      html  css  js  c++  java
  • Golang. 加密


    // AesEncrypt 加密
    // @origData 要加密的字符串
    func (s *Service) AesEncrypt(encryptStr, key []byte) (string, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
    return "", err
    }
    blockSize := block.BlockSize()
    encryptStr = s.PKCS7Padding(encryptStr, blockSize)
    blockMode := cipher.NewCBCEncrypter(block, key[:blockSize])
    crypted := make([]byte, len(encryptStr))
    blockMode.CryptBlocks(crypted, encryptStr)
    return gconv.String(crypted), nil
    //// 转成字节数组
    //encryptData := []byte(encryptStr)
    //k := []byte(key)
    //
    //// 分组秘钥
    //block, _ := aes.NewCipher(k)
    //// 获取秘钥块的长度
    //blockSize := block.BlockSize()
    //// 补全码
    //encryptData = s.PKCS7Padding(encryptData, blockSize)
    //// 加密模式
    //blockMode := cipher.NewCBCEncrypter(block, k[:blockSize])
    //// 创建数组
    //cryted := make([]byte, len(encryptData))
    //// 加密
    //blockMode.CryptBlocks(cryted, encryptData)
    //
    //return base64.StdEncoding.EncodeToString(cryted)
    }

    // AesDecrypt 解密
    // @cryted 需要解密的数据
    func (s *Service) AesDecrypt(cryted string, key string) string {
    // 转成字节数组
    crytedByte, _ := base64.StdEncoding.DecodeString(cryted)
    k := []byte(key)
    // 分组秘钥
    block, _ := aes.NewCipher(k)
    // 获取秘钥块的长度
    blockSize := block.BlockSize()
    // 加密模式
    blockMode := cipher.NewCBCDecrypter(block, k[:blockSize])
    // 创建数组
    orig := make([]byte, len(crytedByte))
    // 解密
    blockMode.CryptBlocks(orig, crytedByte)
    // 去补全码
    orig = s.PKCS7UnPadding(orig)
    return string(orig)
    }

    func (s *Service) PKCS7Padding(ciphertext []byte, blocksize int) []byte {
    padding := blocksize - len(ciphertext)%blocksize
    padtext := bytes.Repeat([]byte{byte(padding)}, padding)
    return append(ciphertext, padtext...)
    }

    //去码
    func (s *Service) PKCS7UnPadding(origData []byte) []byte {
    length := len(origData)
    unpadding := int(origData[length-1])
    return origData[:(length - unpadding)]
    }
  • 相关阅读:
    Android之基于XMPP即时通讯(转)
    开机启动service小DEMO
    Android 歌词同步滚动效果(转)
    OC中的消息传递和初始化
    oc中对象的初始化
    c语言的结构体字节数统计
    css的页面布局
    说一说我理解的css
    什么是js闭包
    我对js作用域的理解
  • 原文地址:https://www.cnblogs.com/arvin-an/p/14535889.html
Copyright © 2011-2022 走看看