首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Go解密使用MCRYPT_RIJNDAEL_256在php中加密的字符串

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

Stack Overflow用户
提问于 2017-08-16 11:33:09
回答 2查看 884关注 0票数 9

在PHP中,mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);返回的值为32,因此显然表示AES-256需要一个32字节的初始化向量。但这是骗人的,正如mcrypt_encrypt中所说的

另外,MCRYPT_RIJNDAEL_256不是AES-256,它是Rijndael分组密码的另一种变体.如果要在mcrypt中使用AES-256,则必须使用32字节密钥的MCRYPT_RIJNDAEL_128。OpenSSL使您所使用的模式更加明显(即'aes-128-cbc‘vs 'aes-256-ctr')。

当然,当IV为32字节时,下面的示例在Go中不起作用(它会引起恐慌)。

代码语言:javascript
运行
复制
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的长度必须与块的块大小相同,并且必须匹配用于加密数据的iv。

(当然还有以Go表示的AES块大小为16字节)。

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

EN

Stack Overflow用户

发布于 2017-12-19 14:01:17

因为在Golang您只有内置的标准AES密码,所以您需要自己实现Rijndael密码。

我在这里找到了一个:https://github.com/celso-wo/rijndael256/blob/master/rijndael256.go

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

https://stackoverflow.com/questions/45712450

复制
相关文章

相似问题

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