当前位置: 首页 > 知识库问答 >
问题:

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

孙玺
2023-03-14

在PHP中,< code > MCRYPT _ get _ iv _ size(MCRYPT _ RIJNDAEL _ 256,MCRYPT _ MODE _ CBC);返回值32,因此显然表明AES-256需要32字节的初始化向量。但这是骗人的,正如< code>mcrypt_encrypt的注释中所说:

此外,MCRYPT_RIJNDAEL_256不是AES-256,它是Rijndael分组密码的不同变体。如果您想要在mcrypt中使用AES-256,您必须使用带有32字节密钥的MCRYPT_RIJNDAEL_128。OpenSSL使您使用的模式更加明显(即'aes-128-cbc'vs'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的长度必须与块的块大小相同,并且必须与用于加密数据的iv相匹配。

(当然,Go中的AES块大小是16字节)。

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

共有1个答案

赵雅懿
2023-03-14

由于在Golang中您只有内置的标准AES加密,因此您需要自己实现Rijndael加密。

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

 类似资料:
  • 问题内容: 我在PHP中有一个函数,可按如下所示加密文本: 如何在Python中解密这些值? 问题答案: 要解密这种加密形式,您将需要获得Rijndael版本。在这里可以找到一个。然后,您将需要模拟PHP Mcrypt模块中使用的键和文本填充。它们增加了填充文本和键的正确大小。他们使用的是256位块大小,并且您提供的密钥使用的密钥大小为128(如果您提供更大的密钥,则密钥大小可能会增加)。不幸的是

  • 问题内容: 我正在通过Apache和Node.js服务器之间的不安全连接发送数据。我需要在PHP中加密数据并在Node.js中解密。我花了2天的时间使它正常工作,但是我只设法使消息签名正常工作,没有加密。我尝试将AES128-CBC,AES256-CBC,DES,AES128,AES256作为算法传递,但是效果不佳。 我在PHP中尝试过: 在Node.js中: 而且除了错误的解密数据外,我还会得到

  • 我想使用chacha20解密和加密字符串 BouncyCastleProvider正在使用chacha20技术。所以我包括了罐子。并尝试了代码,但无法工作。 pbe.java

  • 本文向大家介绍.net core使用MD5加密解密字符串,包括了.net core使用MD5加密解密字符串的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了.net core使用MD5加密解密字符串的具体代码,供大家参考,具体内容如下 调用加密 解密看效果 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我的代码如下: 有人来帮我吗

  • 问题内容: 有人要求我用PHP解密使用以下Java类加密的字符串。 我不懂Java,因此我需要一些帮助来理解这种加密。 1)这行是什么意思? 2)我应该为第一个参数使用什么值 3)什么时候应该在我的php脚本中使用MD5? 问题答案: 1)它创建用于基于密码的加密的参数,哈希计算中包含的盐和哈希算法执行的迭代次数(在其自身的输出中)。它用于击退彩虹表攻击,基本上,攻击者必须经过相同的迭代次数才能检