首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >金刚CrytoJs.AES加密/解密

金刚CrytoJs.AES加密/解密
EN

Stack Overflow用户
提问于 2021-04-26 16:13:47
回答 1查看 1.9K关注 0票数 0
代码语言:javascript
复制
var CryptoJS = require("crypto-js");
 
var data = [{id: 1}, {id: 2}]
 
// Encrypt
var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123').toString();
 
// Decrypt
var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
 
console.log(decryptedData); // [{id: 1}, {id: 2}]

如何在与CryptoJS.AES兼容的Golang中加密/解密?

EN

回答 1

Stack Overflow用户

发布于 2021-04-26 17:31:33

加密策略通常是不管平台而设计的。您看到的密码AES加密是在JS中实现AES加密的。Go在密码包下提供它。Go的文档是开始查找加密代码的好地方。

为了加快速度,下面是一个例子:

加密:

代码语言:javascript
复制
func encrypt(key []byte, text []byte) []byte {
    c, _ := aes.NewCipher(key)
    gcm, _ := cipher.NewGCM(c)

    nonce := make([]byte, gcm.NonceSize())
    if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
        panic(err.Error())
    }

    result := gcm.Seal(nonce, nonce, text, nil)

    return result
}

解密:

代码语言:javascript
复制
func decrypt(key []byte, ciphertext []byte) string {
    c, _ := aes.NewCipher(key)
    gcm, _ := cipher.NewGCM(c)

    nonceSize := gcm.NonceSize()
    if len(ciphertext) < nonceSize {
        panic("ciphertext size is less than nonceSize")
    }

    nonce, ciphertext := ciphertext[:nonceSize], ciphertext[nonceSize:]
    plaintext, _ := gcm.Open(nil, nonce, ciphertext, nil)

    return string(plaintext)
}

用法:

代码语言:javascript
复制
func main() {
    text := []byte("TEXT TO ENCRYPT AND DECRYPT")

    key := []byte("5v8y/B?E(G+KbPeShVmYq3t6w9z$C&12")

    secret := encrypt(key, text)
    plainString := decrypt(key, secret)

    fmt.Println(plainString)
}

操场这里上的工作实例

注意:请确保根据您的喜好处理错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67270166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档