我在论坛上找到了这段代码:
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是文件路径。密码是加密的密码。我想知道这是一种强大的加密方法还是一些不好的加密方法。
答案 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)。