public class AesHelper
    {
        /// <summary>
        /// 生成128位的随机AES秘钥
        /// </summary>
        public static void AutoCreateAesKey()
        {
            AesCryptoServiceProvider m_aesCryptoServiceProvider = new AesCryptoServiceProvider();
            m_aesCryptoServiceProvider.KeySize = 128;
            m_aesCryptoServiceProvider.GenerateKey();
            byte[] key = m_aesCryptoServiceProvider.Key;
            var strKey = Convert.ToBase64String(key, 0, key.Length);
        }

        /// <summary>
        /// AES加密
        /// </summary>
        /// <param name="prestr"></param>
        /// <param name="keyArray"></param>
        /// <returns></returns>
        public static string Encrypt(string prestr, byte[] keyArray)
        {

            byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(prestr);

            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;
            rDel.Mode = CipherMode.ECB;
            rDel.Padding = PaddingMode.PKCS7;

            ICryptoTransform cTransform = rDel.CreateEncryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }

        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="prestr"></param>
        /// <param name="keyArray"></param>
        /// <returns></returns>
        public static string Decrypt(string prestr, byte[] keyArray)
        {
            byte[] toEncryptArray = Convert.FromBase64String(prestr);
            // byte[] keysss = Convert.FromBase64String(aeskey);
            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;

            rDel.Mode = CipherMode.ECB;
            rDel.Padding = PaddingMode.PKCS7;

            ICryptoTransform cTransform = rDel.CreateDecryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return UTF8Encoding.UTF8.GetString(resultArray);
        }

        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="prestr">待加密串</param>
        /// <param name="key">密钥</param>
        /// <returns></returns>
        public static string Decrypt(string prestr, string key)
        {
            byte[] toEncryptArray = Convert.FromBase64String(prestr);
            byte[] keyArray = Convert.FromBase64String(key);
            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;

            rDel.Mode = CipherMode.ECB;
            rDel.Padding = PaddingMode.PKCS7;

            ICryptoTransform cTransform = rDel.CreateDecryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return UTF8Encoding.UTF8.GetString(resultArray);
        }
    }

public static class SlAes
    {
        //默认密钥向量
        private static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

        /// <summary>
        /// AES加密算法
        /// </summary>
        /// <param name="plainText">明文字符串</param>
        /// <param name="key">密钥</param>
        /// <param name="endcoding">编码格式</param>
        /// <returns>将加密后的密文转换为Base64编码,以便显示</returns>
        public static string Encrypt(string plainText, string key,Encoding endcoding=null)
        {
            endcoding = endcoding ?? SlEncoding.Default;
            //分组加密算法
            SymmetricAlgorithm des = Rijndael.Create();
            byte[] inputByteArray = endcoding.GetBytes(plainText);//得到需要加密的字节数组
            //设置密钥及密钥向量
            des.Key = endcoding.GetBytes(key);
            des.IV = _key1;
            byte[] cipherBytes = null;
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    cipherBytes = ms.ToArray();//得到加密后的字节数组
                    cs.Close();
                    ms.Close();
                }
            }
            return Convert.ToBase64String(cipherBytes);
        }

        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="cipherText">密文字符串</param>
        /// <param name="key">密钥</param>
        /// <param name="encoding">编码格式</param>
        /// <returns>返回解密后的明文字符串</returns>
        public static string Decrypt(string cipherText, string key, Encoding encoding = null)
        {
            encoding = encoding ?? SlEncoding.Default;

            byte[] byteCipherText = Convert.FromBase64String(cipherText);
            SymmetricAlgorithm des = Rijndael.Create();
            des.Key = encoding.GetBytes(key);
            des.IV = _key1;
            byte[] decryptBytes = new byte[cipherText.Length];
            using (MemoryStream ms = new MemoryStream(byteCipherText))
            {
                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read))
                {
                    cs.Read(decryptBytes, 0, decryptBytes.Length);
                    cs.Close();
                    ms.Close();
                }
            }
            return Encoding.UTF8.GetString(decryptBytes).Replace("\0", "");   //将字符串后尾的'\0'去掉
        }

    }

Aes 加解密算法的更多相关文章

  1. AES加解密算法Qt实现

    [声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...

  2. AES加解密算法在Android中的应用及Android4.2以上版本调用问题

     from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...

  3. AES加解密算法

    直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中. php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被 ...

  4. 最强加密算法?AES加解密算法Matlab和Verilog实现

    目录 背景 AES加密的几种模式 基本运算 AES加密原理 Matlab实现 Verilog实现 Testbench 此本文首发于公众号[两猿社],重点讲述了AES加密算法的加密模式和原理,用MATL ...

  5. 【加解密专辑】对接触到的PGP、RSA、AES加解密算法整理

    先贴代码,有空再整理思路 PGP加密 using System; using System.IO; using Org.BouncyCastle.Bcpg; using Org.BouncyCastl ...

  6. PHP完整的AES加解密算法使用及例子(256位)

    依赖PHP自身的mcrypt扩展 <?php class aes { // CRYPTO_CIPHER_BLOCK_SIZE 32 private $_secret_key = 'default ...

  7. C#与java中的AES加解密互解算法

    一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string va ...

  8. RSA,AES加解密算法的实现

    目录 Python实现RSA公钥加密算法 RSA公钥加密算法原理 RSA算法的Python实现 AES加解密算法实现 AES加解密算法原理 AES加解密算法Python实现 参考文献 Python实现 ...

  9. DES,AeS加解密,MD5,SHA加密

    1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...

随机推荐

  1. [git]问题list

    1. fast-forward和non fast-forward分别代表什么概念? 2. 在git中文件index是个什么概念? 3. stage/index/cache三者有什么关系? 4. git ...

  2. Hibernate5.2之反向工程

                                                          Hibernate5.2之反向工程 一.描述 可能很多人在使用Hibernate进行项目开发 ...

  3. IE8下调用Active控件

    之前在IE6下运行正常的Active控件,浏览器升级到IE8后全部失效,并呈浏览器崩溃状. 网上搜了一圈得到如下解决方法: 1.设置信任站点 2.还需要在IE浏览器菜单 “工具>Internet ...

  4. 使用Squirrel创建基于Electron开发的Windows 应用安装包

    我们把自己开发的Electron应用发布之前,需要把app打包成简单的安装包,这样app更容易被获取,以此来发布我们的应用.我们可以参考Wix或其他的安装程序,但是对于Electron应用更好的打包程 ...

  5. caffe.exe (caffe.bin)用法回顾

    caffe.bin :command line brew usage : caffe  <command><args> commands: train:  训练或者微调一个网络 ...

  6. Twisted

    Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如网络协议,线程,数据库管理,网络操作,电子邮件等 事件驱动 一,注册事件 二,触发事件 自定义事件框架  event_fram.py # ...

  7. BAE log服务的配置(nodejs)

    log4js.loadAppender('baev3-log'); var options = { 'user': appConfig.AK, //这里是在用户的安全认证中的Access Key ID ...

  8. 实现类似QQ对话聊天功能脚本

    var skin : GUISkin; var showChat = false;private var inputField = "";private var display = ...

  9. .NET牛人应该知道些什么

    任何一个使用.NET的人 1.描述线程与进程的区别? 线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代 码和 ...

  10. jquery 面板拖拽

    在网上找了好多的例子 都不满足我所需要 在网上找了一篇关于easyui是一个拓展的demo  然后根据demo 把我所需要的东西进行再次拓展 满足我的需求 也不多说了 上代码 首先 你肯定是要导eas ...