zoukankan      html  css  js  c++  java
  • 用C#实现AES加密和解密

        AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。

    需要加入引用   using System.Security.Cryptography;

    /// <summary>
    /// 有密码的AES加密
    /// </summary>
    /// <param name="text">加密字符</param>
    /// <param name="password">加密的密码</param>
    /// <param name="iv">密钥</param>
    /// <returns></returns>
    public static string AESEncrypt(string text, string password, string iv)
    {
    RijndaelManaged rijndaelCipher
    = new RijndaelManaged();

    rijndaelCipher.Mode
    = CipherMode.CBC;

    rijndaelCipher.Padding
    = PaddingMode.PKCS7;

    rijndaelCipher.KeySize
    = 128;

    rijndaelCipher.BlockSize
    = 128;

    byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);

    byte[] keyBytes = new byte[16];

    int len = pwdBytes.Length;

    if (len > keyBytes.Length) len = keyBytes.Length;

    System.Array.Copy(pwdBytes, keyBytes, len);

    rijndaelCipher.Key
    = keyBytes;


    byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);
    rijndaelCipher.IV
    = ivBytes;

    ICryptoTransform transform
    = rijndaelCipher.CreateEncryptor();

    byte[] plainText = Encoding.UTF8.GetBytes(text);

    byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);

    return Convert.ToBase64String(cipherBytes);

    }

    /// <summary>
    /// 随机生成密钥
    /// </summary>
    /// <returns></returns>
    public static string GetIv(int n)
    {
    char[] arrChar = new char[]{
    'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x',
    '0','1','2','3','4','5','6','7','8','9',
    'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z'
    };

    StringBuilder num
    = new StringBuilder();

    Random rnd
    = new Random(DateTime.Now.Millisecond);
    for (int i = 0; i < n; i++)
    {
    num.Append(arrChar[rnd.Next(
    0, arrChar.Length)].ToString());

    }

    return num.ToString();
    }

    /// <summary>
    /// AES解密
    /// </summary>
    /// <param name="text"></param>
    /// <param name="password"></param>
    /// <param name="iv"></param>
    /// <returns></returns>
    public static string AESDecrypt(string text, string password, string iv)
    {
    RijndaelManaged rijndaelCipher
    = new RijndaelManaged();

    rijndaelCipher.Mode
    = CipherMode.CBC;

    rijndaelCipher.Padding
    = PaddingMode.PKCS7;

    rijndaelCipher.KeySize
    = 128;

    rijndaelCipher.BlockSize
    = 128;

    byte[] encryptedData = Convert.FromBase64String(text);

    byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);

    byte[] keyBytes = new byte[16];

    int len = pwdBytes.Length;

    if (len > keyBytes.Length) len = keyBytes.Length;

    System.Array.Copy(pwdBytes, keyBytes, len);

    rijndaelCipher.Key
    = keyBytes;

    byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);
    rijndaelCipher.IV
    = ivBytes;

    ICryptoTransform transform
    = rijndaelCipher.CreateDecryptor();

    byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);

    return Encoding.UTF8.GetString(plainText);

    }
  • 相关阅读:
    『转』VC 工具使用和调试方法
    『轉』WINCE下如何实现发短信
    『转』Fatal error: Call to undefined function curl_init
    『转』WinCE驱动程序的分类
    『轉』Windows CE下的串口通讯类
    『轉』VC 6.0 “fatal error LNK1104: cannot open file "mfc42u.lib"”问题解决
    水晶报表乱码中文乱码问题(收藏)
    水晶报表如何完美导出一个Excel表格(收藏)
    ASP.NET AJAX(开发代号Atlas)重要参考资源大收集
    表格排序
  • 原文地址:https://www.cnblogs.com/linzheng/p/1959110.html
Copyright © 2011-2022 走看看