猿问

使用Go编码AES并使用CryptoJS解码

我在Go中有这些:


var commonIV = []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}

plaintext := []byte("hello, world")

key_text := "32o4908go293hohg98fh40gh"

c, err := aes.NewCipher([]byte(key_text))

if err != nil {

    fmt.Printf("Error: NewCipher(%d bytes) = %s", len(key_text), err)

    return

}

cfbdec := cipher.CBCEncrypter(c, commonIV)

ciphertext := make([]byte, len(plaintext))

cfbdec.CryptBlock(ciphertext, plaintext)

fmt.Printf("%x", ciphertext) //HEX

输出:


e0df84c3b83681a8133e1787


然后导入以下网址:


<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/mode-cfb-min.js"></script>

<script src="http://crypto-js.googlecode.com/svn/tags/3.1/build/components/pad-nopadding.js"></script>

我在JS中的代码如下:


var data = CryptoJS.enc.Hex.parse("e0df84c3b83681a8133e1787");

console.log(data);

var key = "32o4908go293hohg98fh40gh";

var iv = CryptoJS.enc.Base64.parse("AAAAAAAAAAAAAAAAAAAAAA==");

console.log(iv);


var encrypted = {};

encrypted.key=key;

encrypted.iv=iv;

encrypted.ciphertext = data;


var dec = CryptoJS.AES.decrypt(encrypted, key, { mode: CryptoJS.mode.CFB, iv: iv,  padding: CryptoJS.pad.NoPadding  });


console.log(dec);

console.log(dec.toString());

console.log(dec.toString(CryptoJS.enc.Utf8));

我做错了什么?


一只斗牛犬
浏览 292回答 2
2回答

炎炎设计

看起来您CBCEncrypter在Go中使用了(块计数器模式),但是CryptoJS.mode.CFB在JS代码中使用了(密码反馈模式)。据我所知,这些不是兼容的块模式。

慕侠2389804

您是否不想在Go代码中使用CBCEncrypter?
随时随地看视频慕课网APP

相关分类

Go
我要回答