V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  TypeErrorNone  ›  全部回复第 4 页 / 共 13 页
回复总数  255
1  2  3  4  5  6  7  8  9  10 ... 13  
2020 年 10 月 20 日
回复了 wantline 创建的主题 分享创造 这一次我们做了个不一样的导航网站,全是优质资源
屁用没有,谁会用?
2020 年 10 月 19 日
回复了 TypeErrorNone 创建的主题 程序员 再来推广一波,大家的 OKR 有哪些呢?
@inroading 不会吧不会吧,还有人不懂?
@liuliu666 什么活动,可以带我吗,通上海
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 套娃...抢票怎么处理,如果超发了很多,都过来检票了
1  2  3  4  5  6  7  8  9  10 ... 13  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3168 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 39ms · UTC 14:24 · PVG 22:24 · LAX 07:24 · JFK 10:24
♥ Do have faith in what you're doing.