V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  TypeErrorNone  ›  全部回复第 3 页 / 共 12 页
回复总数  232
1  2  3  4  5  6  7  8  9  10 ... 12  
2020-10-20 09:50:27 +08:00
回复了 wantline 创建的主题 分享创造 这一次我们做了个不一样的导航网站,全是优质资源
屁用没有,谁会用?
2020-10-19 11:34:57 +08:00
回复了 TypeErrorNone 创建的主题 程序员 再来推广一波,大家的 OKR 有哪些呢?
@inroading 不会吧不会吧,还有人不懂?
2020-10-10 10:15:17 +08:00
回复了 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 08:26:16 +08:00
回复了 zk123 创建的主题 Go 编程语言 有哪些好用的 golang ORM 框架?
好用的标准是什么?
2020-09-23 17:33:16 +08:00
回复了 mashaofeixxx 创建的主题 推广 NUC 黑果套餐 国庆专车 福利帖
我要中奖
2020-09-15 10:06:40 +08:00
回复了 nmcapt2019 创建的主题 Stripe 寻做过支付/风控模型或电商支付的铁铁
d2VjaGF0OkJleU9uZHg=
2020-09-08 19:34:54 +08:00
回复了 brucefu 创建的主题 Java 截图时,把信息隐藏在图片里,还需要防止压缩带来的数据丢失
参考飞书,企业微信
2020-08-10 11:37:52 +08:00
回复了 sjgzsj 创建的主题 PHP 自己写的一个留言板
大哥,挂了
2020-08-10 09:09:27 +08:00
回复了 ccllseven 创建的主题 问与答 记忆力贼差,才 28 岁而已,真的好苦恼。
@screen 哈哈哈哈哈说明这本书没啥用,就别找了
2020-07-28 11:50:44 +08:00
回复了 DelayNoMay 创建的主题 问与答 三年 golang 后台,要不要跳槽?
谁跳谁傻~逼
2020-07-20 15:55:30 +08:00
回复了 hijoker 创建的主题 Go 编程语言 golang 中的 sync.WaitGroup 这样用好么
不可以
2020-07-15 18:01:38 +08:00
回复了 superliwei 创建的主题 分享创造 分享下最近做的一个多人在线会议的项目
考古+1
2020-07-15 17:04:17 +08:00
回复了 Ashenone0 创建的主题 PHP 关于用 redis 判断库存的问题
@xuanbg 套娃...抢票怎么处理,如果超发了很多,都过来检票了
2020-07-15 16:59:38 +08:00
回复了 Ashenone0 创建的主题 PHP 关于用 redis 判断库存的问题
第一种,incr 操作,用 incr 返回的值做是否有剩余库存的判断
2020-07-08 16:12:18 +08:00
回复了 weiruanniubi 创建的主题 程序员 想知道大家通勤的距离和方式,以及房租费用的占比。
上海 500m 走路 1/10
2020-07-07 10:26:53 +08:00
回复了 joucks 创建的主题 推广 个人独立开发了一款文字修仙页游《云顶修仙 Online》船新版
[231]
1  2  3  4  5  6  7  8  9  10 ... 12  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2591 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 10:55 · PVG 18:55 · LAX 02:55 · JFK 05:55
Developed with CodeLauncher
♥ Do have faith in what you're doing.