zoukankan      html  css  js  c++  java
  • [转]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 类写入到文件中, 加密和解密就完成了~ 

  • 相关阅读:
    安卓开发之有序广播
    安卓开发之无序广播
    安卓开发之短信发送器的开发
    安卓开发之隐式意图与显示意图
    安卓root权限 被提示Read-only file system 或 Operation not permitted 解决方案
    gcc 的基本使用和静态库、动态库的制作与使用
    Python类的学习,看这一篇文章就够了!
    Qt 添加程序图标和系统托盘图标
    Qt ListWidget item 发起拖放
    Qt 接受拖放
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2203262.html
Copyright © 2011-2022 走看看