首页 文章

使用MCRYPT_RIJNDAEL_256使用Go加密在php中加密的字符串进行解密

提问于
浏览
9

在PHP中, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); 返回值32,因此显然说AES-256需要32字节的初始化向量 . 但这是欺骗性的,如_378439所述:

此外,MCRYPT_RIJNDAEL_256不是AES-256,它是Rijndael分组密码的不同变体 . 如果你想在mcrypt中使用AES-256,你必须使用带有32字节密钥的MCRYPT_RIJNDAEL_128 . OpenSSL使您更明显地使用哪种模式(即'aes-128-cbc'与'aes-256-ctr') .

当然,对于32字节的IV,以下示例在Go中不起作用(它引起恐慌) .

score := decodePost(c.PostForm("score"))
iv := decodePost(c.PostForm("iv"))

aesKey := getAESKey()
baseAES, err := aes.NewCipher([]byte(aesKey))
if err != nil {
    c.AbortWithError(500, err)
    return
}
block := cipher.NewCBCDecrypter(baseAES, []byte(iv))
block.CryptBlocks(score, score)

引用 crypto/cipher 的文档:

iv的长度必须与Block的块大小相同,并且必须与用于加密数据的iv相匹配 .

(当然,AES block size in Go is 16 bytes) .

那么,最后,我怎么能在Go中解密这样的字符串?

1 回答

相关问题