V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  TypeErrorNone  ›  全部回复第 3 页 / 共 13 页
回复总数  241
1  2  3  4  5  6  7  8  9  10 ... 13  
2020 年 10 月 24 日
回复了 blurh11E27 创建的主题 程序员 分享一下创业经历~ 还有福利噢!
8F,这算是倍数吗
2020 年 10 月 24 日
回复了 blurh11E27 创建的主题 程序员 分享一下创业经历~ 还有福利噢!
7F
2020 年 10 月 23 日
回复了 TypeErrorNone 创建的主题 程序员 只用到最近 3 天数据的订单表如何分表呢
@Riscly 不想再引入 redis 进入订单
2020 年 10 月 23 日
回复了 TypeErrorNone 创建的主题 程序员 只用到最近 3 天数据的订单表如何分表呢
@IMCA1024 这会导致插入订单
2020 年 10 月 23 日
回复了 TypeErrorNone 创建的主题 程序员 只用到最近 3 天数据的订单表如何分表呢
@qiayue 我也考虑过这样,innodb delete 会锁表吗
@zunceng 如果有几十个容器,怎么搞呢
2020 年 10 月 20 日
回复了 wantline 创建的主题 分享创造 这一次我们做了个不一样的导航网站,全是优质资源
屁用没有,谁会用?
2020 年 10 月 19 日
回复了 TypeErrorNone 创建的主题 程序员 再来推广一波,大家的 OKR 有哪些呢?
@inroading 不会吧不会吧,还有人不懂?
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=
参考飞书,企业微信
1  2  3  4  5  6  7  8  9  10 ... 13  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1273 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 40ms · UTC 17:30 · PVG 01:30 · LAX 09:30 · JFK 12:30
♥ Do have faith in what you're doing.