这看起来像是一种可靠的加密方法吗?

时间:2017-06-24 20:26:35

标签: vb.net

我在论坛上找到了这段代码:

   Public Shared Sub Encryptor(wme As String, password As String)
            Try
                Dim key As Byte() = New Byte(31) {}
                Encoding.Default.GetBytes(password).CopyTo(key, 0)
                Dim aes As New RijndaelManaged() With
            {
                .Mode = CipherMode.CBC,
                .KeySize = 256,
                .BlockSize = 256,
                .Padding = PaddingMode.Zeros
            }
                Dim buffer As Byte() = File.ReadAllBytes(wme)
                Using matrizStream As New MemoryStream
                    Using cStream As New CryptoStream(matrizStream, aes.CreateEncryptor(key, key), CryptoStreamMode.Write)
                        cStream.Write(buffer, 0, buffer.Length)
                        Dim appendBuffer As Byte() = matrizStream.ToArray()
                        Dim finalBuffer As Byte() = New Byte(appendBuffer.Length - 1) {}
                        appendBuffer.CopyTo(finalBuffer, 0)
                        File.WriteAllBytes(wme, finalBuffer)
                    End Using
                End Using
                File.Move(wme, wme)
            Catch
            End Try
        End Sub

wme是文件路径。密码是加密的密码。我想知道这是一种强大的加密方法还是一些不好的加密方法。

1 个答案:

答案 0 :(得分:1)

BlockSize为256位的Rijndael 不是AES ,AES仅支持128位的块大小。不是31个字节,会应用一些未知的填充。

对于AES使用:.BlockSize = 128

您需要提供初始化向量(IV)。 IV也将与块大小相同,128位(16字节),使其完全相同。使用随机IV并使用加密数据作为前缀,以便可以进行解密。

AES还支持三种密钥大小,128,192和256位,使密钥完全正确。

此外,空填充是一个坏主意,不支持二进制数据,而通常的填充是PKCS#7(有时指定为PKCS#5)。