V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  TypeErrorNone  ›  全部回复第 5 页 / 共 14 页
回复总数  268
1  2  3  4  5  6  7  8  9  10 ... 14  
2020 年 10 月 10 日
回复了 chengxiao 创建的主题 Go 编程语言 Aes 加密 CBC 模式的 Nopadding 填充在 GO 里怎么实现啊
之前写的,可以参考下

```
package xaes

import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"crypto/sha256"
"encoding/base64"
"github.com/pkg/errors"
)

type Aes struct {
key []byte
}

func NewAes(key string) (*Aes) {
if key == "" {
panic("aes key empty")
}
sum := sha256.Sum256([]byte(key))
return &Aes{
key:sum[:],
}
}

func (a *Aes) Encrypt(encodeBytes []byte) (val string, err error) {
block, err := aes.NewCipher(a.key)
if err != nil {
return
}
blockSize := block.BlockSize()
encodeBytes = a.pkCS5Padding(encodeBytes, blockSize)

iv := make([]byte, blockSize)
_,err = rand.Read(iv)
if err != nil {
return
}

blockMode := cipher.NewCBCEncrypter(block, iv)
crypted := make([]byte, len(encodeBytes))
blockMode.CryptBlocks(crypted, encodeBytes)

iv = append(iv,crypted...)
val = base64.StdEncoding.EncodeToString(iv)
return
}


func (a *Aes) pkCS5Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}

func (a *Aes) Decrypt(decodeStr string) (origData []byte,err error) {
decodeBytes, err := base64.StdEncoding.DecodeString(decodeStr)
if err != nil {
return
}
block, err := aes.NewCipher(a.key)
if err != nil {
return nil, err
}
if len(decodeBytes) < block.BlockSize() {
err = errors.New("decodeBytes 长度不足")
return
}
iv := decodeBytes[:block.BlockSize()]
decodeBytes = decodeBytes[block.BlockSize():]

blockMode := cipher.NewCBCDecrypter(block, iv)
origData = make([]byte, len(decodeBytes))
blockMode.CryptBlocks(origData, decodeBytes)
origData = a.pkCS5UnPadding(origData)
return
}

func (a *Aes) pkCS5UnPadding(origData []byte) []byte {
length := len(origData)
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
```
2020 年 10 月 10 日
回复了 zk123 创建的主题 Go 编程语言 有哪些好用的 golang ORM 框架?
好用的标准是什么?
2020 年 9 月 23 日
回复了 psw84 创建的主题 推广 NUC 黑果套餐 国庆专车 福利帖
我要中奖
2020 年 9 月 15 日
回复了 nmcapt2019 创建的主题 Stripe 寻做过支付/风控模型或电商支付的铁铁
d2VjaGF0OkJleU9uZHg=
参考飞书,企业微信
2020 年 8 月 10 日
回复了 sjgzsj 创建的主题 PHP 自己写的一个留言板
大哥,挂了
2020 年 8 月 10 日
回复了 ccllseven 创建的主题 问与答 记忆力贼差,才 28 岁而已,真的好苦恼。
@screen 哈哈哈哈哈说明这本书没啥用,就别找了
2020 年 7 月 28 日
回复了 DelayNoMay 创建的主题 问与答 三年 golang 后台,要不要跳槽?
谁跳谁傻~逼
2020 年 7 月 20 日
回复了 hijoker 创建的主题 Go 编程语言 golang 中的 sync.WaitGroup 这样用好么
不可以
2020 年 7 月 15 日
回复了 superliwei 创建的主题 分享创造 分享下最近做的一个多人在线会议的项目
考古+1
2020 年 7 月 15 日
回复了 Ashenone0 创建的主题 PHP 关于用 redis 判断库存的问题
@xuanbg 套娃...抢票怎么处理,如果超发了很多,都过来检票了
2020 年 7 月 15 日
回复了 Ashenone0 创建的主题 PHP 关于用 redis 判断库存的问题
第一种,incr 操作,用 incr 返回的值做是否有剩余库存的判断
上海 500m 走路 1/10
[231]
2020 年 7 月 3 日
回复了 Evilk 创建的主题 PHP PHP 7 - swoft 2.x
go 啊
2020 年 7 月 2 日
回复了 Yjmaple 创建的主题 分享发现 为女朋友写了段 rap 不知道能不能挽回她?
谢谢楼主,现在是我写的了,拿去用了
2020 年 6 月 19 日
回复了 kingfalse 创建的主题 程序员 最近撸了一个 json 格式化工具,大家给点意见
有 bug,会导致页面上的 js 执行不了
2020 年 6 月 18 日
回复了 kingfalse 创建的主题 程序员 最近撸了一个 json 格式化工具,大家给点意见
喜欢,使用了,谢谢
1  2  3  4  5  6  7  8  9  10 ... 14  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5053 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 09:35 · PVG 17:35 · LAX 02:35 · JFK 05:35
♥ Do have faith in what you're doing.