• [转]C# 使用 256 位 AES 加密和解密文件


    本文转自:http://www.cnblogs.com/yaob/archive/2011/05/20/2051642.html

    听说 AES 加密是非常安全的, 256 位的甚至是美国神马安全局的加密标准.
    本着收藏不为人知的邪恶资料, 在网上找了一下怎么用 C# 去实现这个加密和解密. 很可惜的是, 网上的代码, 要么出错, 要么不完整, 甚至连微软 MSDN 的代码也讲的不清不楚. 自己经过多方面的整理之后, 得出了以下两段可用的代码. 希望对大家有所帮助.

    加密:

    public byte[] AesEncryptor(byte[] bsFile, string password)
    {
    RijndaelManaged aes
    = new RijndaelManaged();
    aes.Key
    = Encoding.UTF8.GetBytes(this.PasswordMD5(password));
    aes.IV
    = Encoding.UTF8.GetBytes(this.PasswordMD5(password).Substring(8, 16));
    aes.Mode
    = CipherMode.CBC;
    aes.Padding
    = PaddingMode.PKCS7;

    ICryptoTransform transform
    = aes.CreateEncryptor();
    return transform.TransformFinalBlock(bsFile, 0, bsFile.Length);
    }

    解密:

    public byte[] AesDecryptor(byte[] bsFile, string password)
    {
    RijndaelManaged aes
    = new RijndaelManaged();
    aes.Key
    = Encoding.UTF8.GetBytes(this.PasswordMD5(password));
    aes.IV
    = Encoding.UTF8.GetBytes(this.PasswordMD5(password).Substring(8, 16));
    aes.Mode
    = CipherMode.CBC;
    aes.Padding
    = PaddingMode.PKCS7;

    ICryptoTransform transform
    = aes.CreateDecryptor();
    return transform.TransformFinalBlock(bsFile, 0, bsFile.Length);
    }

    使用说明:

    用法其实非常简单. 两法方法都差不多, 简单说一下.
    传入文件的 byte 数组, 以及密码. 因为这个 256 位的 key 是需要 32 位的, 而 IV 是需要 16 位, 于是我用了一个 PasswordMD5 来将密码处理为 32 位. 如果你还不知道怎么 MD5, 可以看我之前的文章.
    另外就是, KEY 和 IV 都是解密的时候要用到的, 且两个值必须正确, 才能成功解开.
    两个方法的返回值都是 byte 数组, 把数组用 File 类写入到文件中, 加密和解密就完成了~ 

  • 相关阅读:
    感悟贴2016-05-13
    操作系统原理部分
    java-NIO
    centos7下环境配置
    mysql 链接驱动问题
    ComboPooledDataSource 连接池耗完
    mvn使用问题
    js button onclick动作赋值操作
    git操作之git clean删除一些没有git add的文件
    VMware虚拟机网络设置
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2203262.html
Copyright © 2020-2023  润新知