Vb.net 到 golang AES

标签 vb.net encryption go aes

我正在尝试将函数加密例程从 VB 转换为 Golang。

我的 Go 路由返回我传递给它的任何值的十六进制长度,但 VB 例程总是返回 32 的长度。

有人可以告诉我我做错了什么吗?

VB:

Function encryptString(ByVal source As String, ByVal key As Byte(), ByVal IV As Byte()) As Byte()
    Dim array As Byte() = Nothing
    Using aesManaged As System.Security.Cryptography.AesManaged = New System.Security.Cryptography.AesManaged()
        aesManaged.Key = key
        aesManaged.IV = IV
        Dim cryptoTransform As ICryptoTransform = aesManaged.CreateEncryptor(aesManaged.Key, aesManaged.IV)
        Using memoryStream As System.IO.MemoryStream = New System.IO.MemoryStream()
            Using cryptoStream As System.Security.Cryptography.CryptoStream = New System.Security.Cryptography.CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write)
                Using streamWriter As System.IO.StreamWriter = New System.IO.StreamWriter(cryptoStream)
                    streamWriter.Write(source)
                End Using
                array = memoryStream.ToArray()
            End Using
        End Using
    End Using

开始

func Encrypt(key string, plaintext string) string {
    block, err := aes.NewCipher([]byte(key))

    if err != nil {
        panic(err)
    }
    str := []byte(plaintext)

    iv := []byte{178, 212, 4, 97, 181, 77, 129, 200, 198, 223, 84, 96, 81, 55, 3, 40}
    encrypter := cipher.NewCFBEncrypter(block, iv)
    encrypted := make([]byte, len(str))
    encrypter.XORKeyStream(encrypted, str)
    fmt.Printf("%s encrypted to %x\n", str, encrypted)
}

而且两次 IV 和 key 都相同,但我得到不同的结果...

最佳答案

默认mode of operation在 .Net 中可能是 CBC(你应该明确设置它),但你的 Go 代码使用 CFB 模式。它们不兼容。

CBC 模式需要填充方案,但 CFB 不需要。 .Net 默认使用 PKCS#7 填充,但 Go 不会为您提供任何添加或删除填充的帮助。您需要自己实现。 This question包含 PKCS#7 填充的实现。

关于Vb.net 到 golang AES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43117572/

相关文章:

.net - "Put N Queens",是否可以在 N = 20 的情况下在可接受的时间内运行?

vb.net - 您如何使用 ExecuteScalar 从 Oracle 数据库返回单个值?

php - 如何获取md5加密的密码

google-chrome - 使用 chromedp 启动具有特定用户配置文件的浏览器

php - 在 golang 中读取 *.wav 文件

vb.net - 查找 Access 版本

c# - LINQ - 嵌套计数问题

c++ - 读取加密的用户名/密码

java - RSA数据解密错误Java : javax. crypto.BadPaddingException: Decryption error

arrays - Golang 读取 Json 对象数组