栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Golang,使用AES和Base64加密字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang,使用AES和Base64加密字符串

这基于NewCFBEncrypter /
NewCFBDecrypter示例,
并且似乎可以满足您的要求:

编辑:基于Kluyg关于IV创建的评论,我修改了示例代码,以使用 推荐的从密文创建IV的
方法,与链接示例从密文创建IV的方法相同。(在生产代码中,每次应单独生成IV。感谢RoundSparrowhilltx]指出了这一点。

我认为您遇到的问题是由于密钥长度无效,但是我不确定100%。

package mainimport (    "crypto/aes"    "crypto/cipher"    "crypto/rand"    "encoding/base64"    "errors"    "fmt"    "io"    "log")func main() {    key := []byte("a very very very very secret key") // 32 bytes    plaintext := []byte("some really really really long plaintext")    fmt.Printf("%sn", plaintext)    ciphertext, err := encrypt(key, plaintext)    if err != nil {        log.Fatal(err)    }    fmt.Printf("%0xn", ciphertext)    result, err := decrypt(key, ciphertext)    if err != nil {        log.Fatal(err)    }    fmt.Printf("%sn", result)}// See alternate IV creation from ciphertext below//var iv = []byte{35, 46, 57, 24, 85, 35, 24, 74, 87, 35, 88, 98, 66, 32, 14, 05}func encrypt(key, text []byte) ([]byte, error) {    block, err := aes.NewCipher(key)    if err != nil {        return nil, err    }    b := base64.StdEncoding.EnpreToString(text)    ciphertext := make([]byte, aes.BlockSize+len(b))    iv := ciphertext[:aes.BlockSize]    if _, err := io.ReadFull(rand.Reader, iv); err != nil {        return nil, err    }    cfb := cipher.NewCFBEncrypter(block, iv)    cfb.XORKeyStream(ciphertext[aes.BlockSize:], []byte(b))    return ciphertext, nil}func decrypt(key, text []byte) ([]byte, error) {    block, err := aes.NewCipher(key)    if err != nil {        return nil, err    }    if len(text) < aes.BlockSize {        return nil, errors.New("ciphertext too short")    }    iv := text[:aes.BlockSize]    text = text[aes.BlockSize:]    cfb := cipher.NewCFBDecrypter(block, iv)    cfb.XORKeyStream(text, text)    data, err := base64.StdEncoding.DepreString(string(text))    if err != nil {        return nil, err    }    return data, nil}

产生:

一些真的真的很长的纯文本

54618bd6bb10612a7b590c53192df214501e01b685540b012581a0ed9ff3ddaa1f4177cc6186b501fb8cce0c2eb764daff475aab724d4d33e614d7d89cf556d8512fd920018c090f
一些真的真的很长的纯文本

操场

希望这有助于查明问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号