使用Aes进行文件加密[英] Using Aes for file encryption

本文是小编为大家收集整理的关于使用Aes进行文件加密的处理方法,想解了使用Aes进行文件加密的问题怎么解决?使用Aes进行文件加密问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

你好,

我没有太多使用加密,所以这可能是一个基本问题.我正在编写一个小程序,使用来自用户的 username 和 password 信息来加密文件.

目前我已经创建了一个 AesManaged 的实例,它总是以相同的方式实例化,无论我是在加密还是解密数据.

代码如下:

private static System.Security.Cryptography.Aes InitAes(string 用户名,string 密码) {System.Security.Cryptography.Aes aes = new System.Security.Cryptography.AesManaged();aes.Padding = System.Security.Cryptography.PaddingMode.PKCS7;aes.KeySize = 128;aes.Key = System.Text.Encoding.Unicode.GetBytes(密码);aes.IV = System.Text.Encoding.Unicode.GetBytes(用户名);返回 aes;}

如您所见,我只是将密码用作密钥,将用户名用作 IV.

现在,我知道在这种情况下,首选方法是使用 Rfc2898DeriveBytes 生成密钥和 IV.

我要问的问题是:正确吗?如果是,我应该如何使用 Rfc2898DeriveBytes?如果我在加密中使用随机盐,我应该如何解密文件?

推荐答案

不确定这是否是解决问题的最佳方法,但我想出了以下解决方案.

  • 定义一个新的Rfc2898DeriveBytes
  • 将密码定义为 Rfc2898DeriveBytes 的密码(这很令人惊讶)
  • 将用户名定义为 salt
  • 使用前 16 个字节(128 位)作为 Key 用于 Aes
  • 使用接下来的 16 个字节作为初始化向量


所以代码目前看起来是这样的:
private static System.Security.Cryptography.Aes InitAes(string 用户名,string 密码) {System.Security.Cryptography.Aes aes = new System.Security.Cryptography.AesManaged();System.Security.Cryptography.Rfc2898DeriveBytes rfc2898= new System.Security.Cryptography.Rfc2898DeriveBytes(密码,System.Text.Encoding.Unicode.GetBytes(用户名));aes.Padding = System.Security.Cryptography.PaddingMode.PKCS7;aes.KeySize = 128;aes.Key = rfc2898.GetBytes(16);aes.IV = rfc2898.GetBytes(16);返回 aes;}


如果有人有意见或改进想法,请随时将它们添加为意见或解决方案.

本文地址:https://www.itbaoku.cn/post/1355743.html