golang 创建随机密钥字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 创建随机密钥字符串相关的知识,希望对你有一定的参考价值。
Golang:如何使用 DES 和 CBC 加密 5 个字符长的纯文本?
【中文标题】Golang:如何使用 DES 和 CBC 加密 5 个字符长的纯文本?【英文标题】:Golang: How do I encrypt plain text that is 5 characters long with DES and CBC? 【发布时间】:2017-01-05 17:11:51 【问题描述】:目前正在尝试将 5 个字符长的纯文本加密为 12 个字符的加密字符串。我希望能够指定唯一的 IV(不是随机生成的)、唯一的密钥并使用 DES。我当前的code 要求明文长度为 8 个字符(5 个字符名称加 3 个空格)。
【问题讨论】:
您或许可以使用 PKCS7 填充:play.golang.org/p/SpEUHSMR9e play.golang.org/p/wBF8iYBbeV @ralph 提出了一个很好的解决方案。 DES 适用于 64 位块,因此需要填充。 PKCS7 是一种解决方案。它将值为 n 的 n 个字节添加到明文的末尾,其中 n 是所需的填充量。如果你的数据正好是块大小,它需要一个额外的完整块来填充。 @ralph 也许你应该用那个+简短的解释来回答。 这是我发现的一些实现 pad 和 unpad 的代码:github.com/go-web/tokenizer/blob/master/pkcs7.go 【参考方案1】:我已经遇到过这个问题。这是因为填充问题。你想要的代码是一个
Code link你可以在 go playground 测试一下。
package main
import (
"crypto/cipher"
"crypto/des"
"encoding/base64"
"fmt"
"bytes"
)
func main()
originalText := "yolan"
fmt.Println(originalText)
key := []byte0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC
// encrypt value to base64
cryptoText := encrypt(key, originalText)
fmt.Println(cryptoText)
// encrypt string to base64 crypto using des
func encrypt(key []byte, text string) string
plaintext := []byte(text)
block, err := des.NewCipher(key)
if err != nil
panic(err)
iv := []byte0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC
blockSize := block.BlockSize()
origData := PKCS5Padding(plaintext, blockSize)
blockMode := cipher.NewCBCEncrypter(block, iv)
cryted := make([]byte, len(origData))
blockMode.CryptBlocks(cryted, origData)
return base64.URLEncoding.EncodeToString(cryted)
func PKCS5Padding(src []byte, blockSize int) []byte
padding := blockSize - len(src)%blockSize
padtext := bytes.Repeat([]bytebyte(padding), padding)
return append(src, padtext...)
func PKCS5UnPadding(src []byte) []byte
length := len(src)
unpadding := int(src[length-1])
return src[:(length - unpadding)]
【讨论】:
以上是关于golang 创建随机密钥字符串的主要内容,如果未能解决你的问题,请参考以下文章