繁体   English   中英

AES 使用 OpenSSL 加密,使用 C# .Net 解密

[英]AES encrypt with OpenSSL, decrypt with C# .Net

我需要知道如何在 AES-OpenSSL 中加密消息并在 .NET(C# 或 VB)中解密或知道 AES-OPENSSL 和 AES-.NET 之间有什么区别

谢谢!

VB.NET 中的代码

Public Function AES_Decrypt(ByVal prm_key As String, ByVal prm_iv As String, ByVal prm_text_to_decrypt As String)

    Dim sEncryptedString As String = prm_text_to_decrypt

    Dim myRijndael As New RijndaelManaged
    myRijndael.Padding = PaddingMode.Zeros
    myRijndael.Mode = CipherMode.CBC
    myRijndael.KeySize = 256
    myRijndael.BlockSize = 256

    Dim key() As Byte
    Dim IV() As Byte

    key = System.Text.Encoding.ASCII.GetBytes(prm_key)
    IV = System.Text.Encoding.ASCII.GetBytes(prm_iv)

    Dim decryptor As ICryptoTransform = myRijndael.CreateDecryptor(key, IV)

    Dim sEncrypted As Byte() = Convert.FromBase64String(sEncryptedString)

    Dim fromEncrypt() As Byte = New Byte(sEncrypted.Length) {}

    Dim msDecrypt As New MemoryStream(sEncrypted)
    Dim csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)

    csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length)

    Return (System.Text.Encoding.ASCII.GetString(fromEncrypt))

End Function

在您的评论中,您要求一种在 C# 中加密和在 OpenSSL 中解密的方法。 是 EVP_BytesToKey 在 C# 中一个很好的实现

现在您只需要在 C# 中生成一个随机字节数组,然后在两侧使用这些函数(OpenSSL 端的 EVP 和 C# 中的第二个)与您的公共随机字节数组。

但请注意,您必须使用相同的哈希算法:在给定的链接中,使用 MD5。 您可能必须根据 EVP_BytesToKey 正在使用的一个(或相反)将其更改为 SHA1。 同样的方式,你必须根据你的需要调整帖子中给出的 Derive 算法中的 key 和 iv 大小,这里是 32 和 32。

希望有所帮助。

编辑1:我忘了。 正如 owlstead 在他的评论中所说,Rijndael 允许您使用 256 位的块大小。 但是, AES 块大小始终固定为 128 位,因此您的块大小必须为 128 位,而您的 iv必须为 16 字节。

当你想使用盐时,还有一个问题。 OpenSSL 使用 base64 加密的“Salt__”和实际的 salt 数组预先加密字节数组。 你可以在这篇文章中找到一个例子。

编辑 2: OpenSSL 1.1.0c 更改了一些内部组件中使用的摘要算法 以前用的是MD5,1.1.0改用SHA256。 请注意,此更改不会影响您对EVP_BytesToKeyopenssl enc等命令的影响。

AES 是 AES。 有 NIST 测试向量可确保实现兼容,并且还指定了字节顺序。 所以它归结为选择正确的模式(例如 CBC 或经过身份验证的 GCM 模式)和填充模式(PKCS#7 用于 CBC,“无”用于 GCM)。 选择正确的密钥和 IV,您就可以开始了。 要特别注意理解 AES 的输入,尤其要确保你理解编码和字符编码以及随机数生成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM