Encryption AES加密协助

Encryption AES加密协助,encryption,aes,Encryption,Aes,我有一个116个字符的十六进制字符串,需要对其进行AES加密,然后转换为Base64。我在StackOverflow这里发现了以下AES加密代码,通过测试,它可以正常工作,至少我得到了与供应商相同的结果。根据供应商的说明,我遇到的问题是“生成的字符串应该是88个字符长,以两个填充字符结尾。”我以172个字符的Base64字符串结尾,我不知道问题出在哪里。任何帮助都将不胜感激 Function EncryptFromStringToBytes(ByVal plainText As String)

我有一个116个字符的十六进制字符串,需要对其进行AES加密,然后转换为Base64。我在StackOverflow这里发现了以下AES加密代码,通过测试,它可以正常工作,至少我得到了与供应商相同的结果。根据供应商的说明,我遇到的问题是“生成的字符串应该是88个字符长,以两个填充字符结尾。”我以172个字符的Base64字符串结尾,我不知道问题出在哪里。任何帮助都将不胜感激

Function EncryptFromStringToBytes(ByVal plainText As String) As Byte()
    Dim encrypted As Byte()
    'Create AES object
    Using AES As RijndaelManaged = New RijndaelManaged()
        AES.Padding = PaddingMode.PKCS7
        AES.KeySize = 256
        AES.Mode = CipherMode.CBC
        AES.Key = StringToByteArray(strSharedKey)
        AES.IV = StringToByteArray(strIV)
        'create an encryptor to perform stream transform
        Dim encryptor As ICryptoTransform = AES.CreateEncryptor(AES.Key, AES.IV)
        'create the streams used for encryption
        Using msEncrypt As MemoryStream = New MemoryStream()
            Using csEncrypt As CryptoStream = New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
                'write all data to the stream. Streamwriter will use the default UTF8 encoding if not specified.
                Using swEncrypt As StreamWriter = New StreamWriter(csEncrypt) ', System.Text.Encoding.ASCII)
                    swEncrypt.Write(plainText)
                End Using
                encrypted = msEncrypt.ToArray()
            End Using
        End Using
    End Using
    'return encrypted bytes from the memory stream and convert to Base64
    Return Convert.ToBase64String(encrypted)
    'TextBox3.Text = Len(encrypted)
    'Return encrypted

End Function
@卢克·约书亚·帕克: IV、SharedKey和SharedSecret以Hx表示法提供给我。 供应商说明如下: 1.将UTC日期/时间从UTF8转换为Hx表示法 (结果字符串的长度为50个Hx字符。)-这是正确的 2.连接步骤1+“7c”+共享机密 (结果字符串长度为116 Hx个字符)-这是正确的 3.AES加密步骤2-我认为这就是问题所在,但我得到的测试结果值与供应商得到的值相同 4.将步骤3转换为Base64

这是StringToByteArray()函数:

    Function StringToByteArray(text As String) As Byte()
    Dim bytes As Byte() = New Byte(text.Length \ 2 - 1) {}
    For i As Integer = 0 To text.Length - 1 Step 2
        bytes(i \ 2) = Convert.ToByte(text.Substring(i, 2), 16)
    Next
    Return bytes
End Function

作为旁注,如何在文本框中查看加密字符串?如果我使用EncryptFromStringToBytes(CVr2.Text).ToString,它将返回system.byte[]而不是实际值。

不加密116个字符的十六进制字符串,而是加密它们所代表的58个字节。


然后,58个字节将提供64个字节的加密数据。64字节等于512位,由于base64对每个字符编码6位,因此需要512/6~86个字符对其进行编码。。由于base64以4个字符的块进行编码,您将需要2个填充字符,最终得到一个88个字符的base64编码字符串。

您能否提供从“供应商”处收到的确切说明集?您是否也可以确保您提供了一个-我们看不到您如何定义
strIV
或类似的内容。我提前表示歉意,但您如何加密它们所代表的58个字节?如果我理解正确,请使用StringToByteArray然后加密该结果?谢谢!我做了以下操作,得到了带有2个填充“==”的88个字符的字符串。我按照您的建议做了,将起始字符串转换为字节数组,加密字节数组,然后转换为Base 64字符串,然后POOF!