C# 之 AES加密源码
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using Exam.EncryptPrivate;
- using System.Text;
- using System.Security.Cryptography;
- /// <summary>
- /// Aes加密、解密,密钥长度256,密钥长度不大于32个字节
- /// </summary>
- public class AesCryptoHelper
- {
- public const string RET_ERROR = "x07x07x07x07x07";
- private const string CRYPTO_IV = "XIANJIAN";
- private const string CRYPTO_KEY = "XIANJIAN";
- private const int CRYPTO_KEY_LENGTH = ;
- private const int CRYPTO_IV_LENGTH = ;
- private AesCryptoServiceProvider m_aesCryptoServiceProvider;
- private string m_message;
- public string Message
- {
- get { return m_message; }
- set { m_message = value; }
- }
- private bool m_containKey;
- /// <summary>
- /// True:密文中包含密钥
- /// False:密文中不包含密钥
- /// </summary>
- public bool ContainKey
- {
- get { return m_containKey; }
- set { m_containKey = value; }
- }
- public AesCryptoHelper()
- {
- m_aesCryptoServiceProvider = new AesCryptoServiceProvider();
- m_containKey = true;
- m_message = string.Empty;
- }
- public AesCryptoHelper(bool containKey):this()
- {
- m_containKey = containKey;
- }
- private string Encrypt(string s_crypto, byte[] key, byte[] iv)
- {
- string s_encryped = string.Empty;
- byte[] crypto, encrypted;
- ICryptoTransform ct;
- try
- {
- crypto = string2Byte(s_crypto);
- m_aesCryptoServiceProvider.Key = key;
- m_aesCryptoServiceProvider.IV = iv;
- ct = m_aesCryptoServiceProvider.CreateEncryptor();
- encrypted = ct.TransformFinalBlock(crypto, , crypto.Length);
- if (m_containKey)
- {
- s_encryped += byte2HexString(key);
- }
- s_encryped += byte2HexString(encrypted);
- return s_encryped;
- }
- catch (Exception ex)
- {
- m_message = ex.ToString();
- return RET_ERROR;
- }
- }
- /// <summary>
- /// 指定密钥对明文进行AES加密
- /// </summary>
- /// <param name="s_crypto">明文</param>
- /// <param name="s_key">加密密钥</param>
- /// <returns></returns>
- public string Encrypt(string s_crypto, string s_key)
- {
- byte[] key = new byte[CRYPTO_KEY_LENGTH], iv = new byte[CRYPTO_IV_LENGTH];
- byte[] temp = string2Byte(s_key);
- if (temp.Length > key.Length)
- {
- m_message = "Key too long,need less than 32 Bytes key.";
- return RET_ERROR;
- }
- key = string2Byte(s_key.PadRight(key.Length));
- iv = string2Byte(CRYPTO_IV.PadRight(iv.Length));
- return Encrypt(s_crypto, key, iv);
- }
- /// <summary>
- /// 动态生成密钥,并对明文进行AES加密
- /// </summary>
- /// <param name="s_crypto">明文</param>
- /// <returns></returns>
- public string Encrypt(string s_crypto)
- {
- byte[] key = new byte[CRYPTO_KEY_LENGTH], iv = new byte[CRYPTO_IV_LENGTH];
- m_aesCryptoServiceProvider.GenerateKey();
- key = m_aesCryptoServiceProvider.Key;
- iv = string2Byte(CRYPTO_IV.PadRight(iv.Length));
- return Encrypt(s_crypto, key, iv);
- }
- private string Decrypt(string s_encrypted, byte[] key, byte[] iv)
- {
- string s_decrypted = string.Empty;
- byte[] encrypted, decrypted;
- ICryptoTransform ct;
- try
- {
- encrypted = hexString2Byte(s_encrypted);
- m_aesCryptoServiceProvider.Key = key;
- m_aesCryptoServiceProvider.IV = iv;
- ct = m_aesCryptoServiceProvider.CreateDecryptor();
- decrypted = ct.TransformFinalBlock(encrypted, , encrypted.Length);
- s_decrypted += byte2String(decrypted);
- return s_decrypted;
- }
- catch (Exception ex)
- {
- m_message = ex.ToString();
- m_message = "Decrypt fail.";
- return RET_ERROR;
- }
- }
- /// <summary>
- /// 从密文中解析出密钥,并对密文进行解密
- /// </summary>
- /// <param name="s_encrypted">密文</param>
- /// <returns></returns>
- public string Decrypt(string s_encrypted)
- {
- string s_key = string.Empty;
- byte[] key = new byte[CRYPTO_KEY_LENGTH], iv = new byte[CRYPTO_IV_LENGTH];
- if (s_encrypted.Length <= CRYPTO_KEY_LENGTH * )
- {
- m_message = "Encrypted string invalid.";
- return RET_ERROR;
- }
- if (m_containKey)
- {
- s_key = s_encrypted.Substring(, CRYPTO_KEY_LENGTH * );
- s_encrypted = s_encrypted.Substring(CRYPTO_KEY_LENGTH * );
- }
- key = hexString2Byte(s_key);
- iv = string2Byte(CRYPTO_IV.PadRight(iv.Length));
- return Decrypt(s_encrypted, key, iv);
- }
- /// <summary>
- /// 指定密钥,并对密文进行解密
- /// </summary>
- /// <param name="s_encrypted">密文</param>
- /// <param name="s_key">密钥</param>
- /// <returns></returns>
- public string Decrypt(string s_encrypted, string s_key)
- {
- byte[] key = new byte[CRYPTO_KEY_LENGTH], iv = new byte[CRYPTO_IV_LENGTH];
- byte[] temp = string2Byte(s_key);
- if (temp.Length > key.Length)
- {
- m_message = "Key invalid.too long,need less than 32 Bytes";
- return RET_ERROR;
- }
- key = string2Byte(s_key.PadRight(key.Length));
- iv = string2Byte(CRYPTO_IV.PadRight(iv.Length));
- if (m_containKey)
- {
- s_encrypted = s_encrypted.Substring(CRYPTO_KEY_LENGTH * );
- }
- return Decrypt(s_encrypted, key, iv);
- }
- private string byte2HexString(byte[] bytes)
- {
- StringBuilder sb = new StringBuilder();
- foreach (byte b in bytes)
- {
- sb.AppendFormat("{0:X2}", b);
- }
- return sb.ToString();
- }
- private byte[] hexString2Byte(string hex)
- {
- int len = hex.Length / ;
- byte[] bytes = new byte[len];
- for (int i = ; i < len; i++)
- {
- bytes[i] = (byte)(Convert.ToInt32(hex.Substring(i * , ), ));
- }
- return bytes;
- }
- private byte[] string2Byte(string str)
- {
- return Encoding.UTF8.GetBytes(str);
- }
- private string byte2String(byte[] bytes)
- {
- return Encoding.UTF8.GetString(bytes);
- }
- }
C# 之 AES加密源码的更多相关文章
- md5 32位小写加密源码
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * md5 32位小写加密 ...
- 【转】asp.net(c#)加密解密算法之sha1、md5、des、aes实现源码详解
原文地址:http://docode.top/Article/Detail/10003 目录: 1..Net(C#)平台下Des加密解密源代码 2..Net(C#)平台下Aes加密解密源代码 3..N ...
- net reactor加密源码保软件安全-net reactor使用教程
上一次介绍用 Xenocode Postbuild for .NET 混淆加密源代码确保软件安全,本篇将讨论用 Eziriz .NET Reactor 混淆加密软件源代码,为从未用过该软件加密的用户分 ...
- Python实现基于DES加密源码的文本加密器
这是自行制作的一个DES文本加密工具 最终效果图: 本加密器支持UTF-8字符的加解密(包含中文),由于其中的编码方式与常用编码方式不同,加密结果与网上工具不同,但是能实现正常加解密. 最终目标: 目 ...
- MD5加密源码!
import java.security.*; class MD5{ public final static String MD5(String s){ char hexDigits[] = {'0' ...
- python爬虫破解带有CryptoJS的aes加密的反爬机制
发现问题 在一次偶然中,在爬取某个公开网站(非商业型网站)时,老方法,打开调试工具查看请求方式,请求拦截,是否是异步加载,不亦乐乎,当我以为这个网站非常简单的时候,发现二级网页的地址和源码不对应 Aj ...
- Python基础教程3——教你用Python做个简单的加密程序(还基础什么呀,直接来练习吧,带源码)
因为发现基础教程我之前推荐的那个网站就已经很完善了,就不重复写了,所以本汪来一起做练习吧. 一.加密原理 记得当时我学c++的时候,学到输入输出流的时候,当时王老师就教我们写了一个小的加密程序,所以这 ...
- JAVA上百实例源码以及开源项目
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...
- 使用AES加密的勒索类软件分析报告
报告名称: 某勒索类软件分析报告 作者: 李东 报告更新日期: 样本发现日期: 样本类型: 样本文件大小/被感染文件变化长度: 样本文件MD5 校验值: da4ab5e31793 ...
随机推荐
- SharePoint 2010 获取列表中所有数据(包括文件夹内)的方法
转: http://blog.csdn.net/wangwenism/article/details/8751411 SharePoint的列表能存储文件以及文件夹,用户使用的时候,经常会建几个分类文 ...
- C#.NET开源项目、机器学习、商务智能
所以原谅我,不能把所有的都发上来,太杂了,反而不好. 1..NET时间周期处理组件 这个组件很小,主要是对时间日期,特别是处理时间间隔以及时间范围非常方便.虽然.NET自带了时间日期的部分功能,但可能 ...
- Discuz!NT中的Redis架构设计
在之前的Discuz!NT缓存的架构方案中,曾说过Discuz!NT采用了两级缓存方式,即本地缓存+memcached方式.在近半年多的实际运行环境下,该方案经受住了检验.现在为了提供多样式的解决方案 ...
- SQL日志文件的作用
服务器意外关闭造成的损失.服务器意外关闭造成的损失.解决数据一致性问题.数据库时点恢复的问题,这四个常见的问题,SQL Server数据库管理员,可以通过了解数据日志文件,轻松排除故障. 当系统出现故 ...
- Eclipse(非J2EE版本)配置Extjs环境以及安装部署Tomcat
Eclipse(非J2EE版本)配置Extjs环境(Spket) 1. 安装spket插件,帮助->安装新软件->http://www.agpad.com/update. 2. 设置Spk ...
- Bzoj 2006: [NOI2010]超级钢琴 堆,ST表
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2222 Solved: 1082[Submit][Statu ...
- [学姿势]实验室搬砖+node学习
这周开始进行收尾工作,我当然没有进行核心技术的开发,主要负责的是对web端进行展示上的修修补补,主要包括添加VLC播放器.rtsp视频流以及一些js细节. 1.VLC 全称为Video Lan Cli ...
- cache 的简单认识与思考
之前对NOSQL的总结是:基本功能是key-value, 然后各自附加特殊功能. 现在简单的来认识一下cache. 背景 大家都知道NoSQL, 大多数都是 key-value 型的数据库.有些内存型 ...
- 转载 DNS查询流程简介
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/45545059 DNS(domain name system),读者们或多或少都听过,就是 ...
- 依賴注入入門——Unity(一)
參考資料http://blog.csdn.net/m13666368773/article/details/7802126 背景介紹 在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系, ...