using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.Security.Cryptography;  
    using System.IO;  
      
    namespace Csharp  
    {  
        class AESHelper  
        {  
            /// <summary>  
            /// AES加密  
            /// </summary>  
            /// <param name="Data">被加密的明文</param>  
            /// <param name="Key">密钥</param>  
            /// <param name="Vector">向量</param>  
            /// <returns>密文</returns>  
            public static String AESEncrypt(String Data, String Key, String Vector)  
            {  
                Byte[] plainBytes = Encoding.UTF8.GetBytes(Data);  
      
                Byte[] bKey = new Byte[32];  
                Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);  
                Byte[] bVector = new Byte[16];  
                Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);  
      
                Byte[] Cryptograph = null; // 加密后的密文  
      
                Rijndael Aes = Rijndael.Create();  
                try  
                {  
                    // 开辟一块内存流  
                    using (MemoryStream Memory = new MemoryStream())  
                    {  
                        // 把内存流对象包装成加密流对象  
                        using (CryptoStream Encryptor = new CryptoStream(Memory,  
                         Aes.CreateEncryptor(bKey, bVector),  
                         CryptoStreamMode.Write))  
                        {  
                            // 明文数据写入加密流  
                            Encryptor.Write(plainBytes, 0, plainBytes.Length);  
                            Encryptor.FlushFinalBlock();  
      
                            Cryptograph = Memory.ToArray();  
                        }  
                    }  
                }  
                catch  
                {  
                    Cryptograph = null;  
                }  
      
                return Convert.ToBase64String(Cryptograph);  
            }  
      
            /// <summary>  
            /// AES解密  
            /// </summary>  
            /// <param name="Data">被解密的密文</param>  
            /// <param name="Key">密钥</param>  
            /// <param name="Vector">向量</param>  
            /// <returns>明文</returns>  
            public static String AESDecrypt(String Data, String Key, String Vector)  
            {  
                Byte[] encryptedBytes = Convert.FromBase64String(Data);  
                Byte[] bKey = new Byte[32];  
                Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);  
                Byte[] bVector = new Byte[16];  
                Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);  
      
                Byte[] original = null; // 解密后的明文  
      
                Rijndael Aes = Rijndael.Create();  
                try  
                {  
                    // 开辟一块内存流,存储密文  
                    using (MemoryStream Memory = new MemoryStream(encryptedBytes))  
                    {  
                        // 把内存流对象包装成加密流对象  
                        using (CryptoStream Decryptor = new CryptoStream(Memory,  
                        Aes.CreateDecryptor(bKey, bVector),  
                        CryptoStreamMode.Read))  
                        {  
                            // 明文存储区  
                            using (MemoryStream originalMemory = new MemoryStream())  
                            {  
                                Byte[] Buffer = new Byte[1024];  
                                Int32 readBytes = 0;  
                                while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)  
                                {  
                                    originalMemory.Write(Buffer, 0, readBytes);  
                                }  
      
                                original = originalMemory.ToArray();  
                            }  
                        }  
                    }  
                }  
                catch  
                {  
                    original = null;  
                }  
                return Encoding.UTF8.GetString(original);  
            }  
      
      
      
            /// <summary>  
            /// AES加密(无向量)  
            /// </summary>  
            /// <param name="plainBytes">被加密的明文</param>  
            /// <param name="key">密钥</param>  
            /// <returns>密文</returns>  
            public static string AESEncrypt(String Data, String Key)  
            {  
                MemoryStream mStream = new MemoryStream();  
                RijndaelManaged aes = new RijndaelManaged();  
      
                byte[] plainBytes = Encoding.UTF8.GetBytes(Data);  
                Byte[] bKey = new Byte[32];  
                Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);  
      
                aes.Mode = CipherMode.ECB;  
                aes.Padding = PaddingMode.PKCS7;  
                aes.KeySize = 128;  
                //aes.Key = _key;  
                aes.Key = bKey;  
                //aes.IV = _iV;  
                CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateEncryptor(), CryptoStreamMode.Write);  
                try  
                {  
                    cryptoStream.Write(plainBytes, 0, plainBytes.Length);  
                    cryptoStream.FlushFinalBlock();  
                    return Convert.ToBase64String(mStream.ToArray());  
                }  
                finally  
                {  
                    cryptoStream.Close();  
                    mStream.Close();  
                    aes.Clear();  
                }  
            }  
      
      
            /// <summary>  
            /// AES解密(无向量)  
            /// </summary>  
            /// <param name="encryptedBytes">被加密的明文</param>  
            /// <param name="key">密钥</param>  
            /// <returns>明文</returns>  
            public static string AESDecrypt(String Data, String Key)  
            {  
                Byte[] encryptedBytes = Convert.FromBase64String(Data);  
                Byte[] bKey = new Byte[32];  
                Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);  
                  
                MemoryStream mStream = new MemoryStream(encryptedBytes);  
                //mStream.Write( encryptedBytes, 0, encryptedBytes.Length );  
                //mStream.Seek( 0, SeekOrigin.Begin );  
                RijndaelManaged aes = new RijndaelManaged();  
                aes.Mode = CipherMode.ECB;  
                aes.Padding = PaddingMode.PKCS7;  
                aes.KeySize = 128;  
                aes.Key = bKey;  
                //aes.IV = _iV;  
                CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateDecryptor(), CryptoStreamMode.Read);  
                try  
                {  
                    byte[] tmp = new byte[encryptedBytes.Length + 32];  
                    int len = cryptoStream.Read(tmp, 0, encryptedBytes.Length + 32);  
                    byte[] ret = new byte[len];  
                    Array.Copy(tmp, 0, ret, 0, len);  
                    return Encoding.UTF8.GetString(ret);  
                }  
                finally  
                {  
                    cryptoStream.Close();  
                    mStream.Close();  
                    aes.Clear();  
                }  
            }  
      
      
      
      
        }  
    }

.net AES加密解密的更多相关文章

  1. 非对称技术栈实现AES加密解密

    非对称技术栈实现AES加密解密 正如前面的一篇文章所述,https协议的SSL层是实现在传输层之上,应用层之下,也就是说在应用层上看到的请求还是明码的,对于某些场景下要求这些http请求参数是非可读的 ...

  2. C#中使用DES和AES加密解密

    C#中使用DES和AES加密解密 2008-01-12 09:37 using System;using System.Text;using System.Security.Cryptography; ...

  3. C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  4. ruby AES加密解密

    最近和京东合作做一个项目,在接口对接传递参数时,参数需要通过AES加密解密. 本来想到用gem 'aescrypt'处理,但是aescrypt的编码方式用的base64,而京东那边用的是16进制.所以 ...

  5. openssl与cryptoAPI交互AES加密解密

    继上次只有CryptoAPI的加密后,这次要实现openssl的了 动机:利用CryptoAPI制作windows的IE,火狐和chrome加密控件后,这次得加上与android的加密信息交互 先前有 ...

  6. java使用AES加密解密 AES-128-ECB加密

    java使用AES加密解密 AES-128-ECB加密 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; impo ...

  7. AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用

    一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...

  8. AES加密解密 助手类 CBC加密模式

    "; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...

  9. php与java通用AES加密解密算法

    AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...

  10. Java 关于密码处理的工具类[MD5编码][AES加密/解密]

    项目中又遇到了加密问题,又去翻了半天,然后做测试,干脆就把常用的两类小结一下. 1.第一种所谓的MD5加密 其实也不算加密,只是基于Hash算法的不可逆编码而已,等于说,一旦经过MD5处理,是不可能从 ...

随机推荐

  1. iOS Unicode和汉字互转

    //unicode转中文 NSString* strA = [@"%E4%B8%AD%E5%9B%BD"stringByReplacingPercentEscapesUsingEn ...

  2. Socket的简单使用

    一.Socket: Socket又称”套接字" 网络上的两个程序通过一个双向的通信链接实现数据的交换,这个连接的一端成为一个socket 应用程序通常通过”套接字”向网络发出请求或者应答网络 ...

  3. ThreadLocal源码分析

    1.概述 ThreadLocal,可以理解为线程的局部变量,作用就是为每一个使用该变量的线程都提供一个变量值的副本,每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突. ThreadLo ...

  4. OEM代工厂产品经理个人经历谈

    创业不是一件随随便便的事情! 到2007年时,我已经在上海.广州.东莞三地的工厂打工有十来年了.正是这个时间结点,我也即将做父亲了.打了很久的工后,就开始感到疲倦,做来做去,都是给老板做,也就在这时开 ...

  5. 安卓+servlet+MySql 查询+插入(汉字乱码解决)

    问题: 安卓程序,通过servlet连接MySQL数据库,并实现查询和插入(修改,删除类似). 其中遇到的最大的问题是:汉字乱码问题(查询条件有汉字乱码.servlet的汉字到数据乱码.安卓通过ser ...

  6. OSGI入门笔记

    OSGI框架为Java定义了一个动态模块化系统,它使你可以更好地控制代码结构,动态管理代码的生命周期,并且提供了代码写作的松耦合方式:更值得称道的是,它的规范文档描述详尽.--<OSGI实战&g ...

  7. dotNET使用DRPC远程调用运行在Storm上的Topology

    Distributed RPC(DRPC)是Storm构建在Thrift协议上的RPC的实现,DRPC使得你可以通过多种语言远程的使用Storm集群的计算能力.DRPC并非Storm的基础特性,但它确 ...

  8. winform 可拖动的自定义Label控件

    效果预览: 实现步骤如下: (1)首先在项目上右击选择:添加->新建项,添加自定义控件 (2)自定义的一个Label让它继承LabelControl控件,LabelControl控件是DevEx ...

  9. 工作中常用的Linux命令:find命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6056571.html (转载请注明出处) 1.命令格式 find [-H] [-L] [-P] [-D deb ...

  10. linux原始套接字(3)-构造IP_TCP发送与接收

    一.概述                                                    tcp报文封装在ip报文中,创建tcp的原始套接字如下: sockfd = socket ...