使用AES加密的帮助类
在开发中经常使用加密/解密对一些内容进行处理,比如密码在存入数据库之前先经过加密处理等等,这里就把一个加密帮助类代码贴出来,供以后查找使用。
这个帮助类主要功能是对字符串和字节数组进行加密解密处理。
public class EncryptionHelper
{
//默认密钥向量
private static readonly byte[] DefaultKey = {0x12, 0x34, 0x56, 120, 0x90, 0xab, 0xcd, 0xef}; /// <summary>
/// 解密字节数组
/// </summary>
/// <param name="cipherBytes">密文字节数组</param>
/// <param name="password">密钥</param>
/// <returns>解密后字节数组</returns>
public static byte[] DecryptBytes(byte[] cipherBytes, string password)
{
byte[] buffer;
try
{
using (Aes aes = new AesManaged())
{
//设置密钥及密钥向量
aes.Key = new Rfc2898DeriveBytes(password, DefaultKey).GetBytes(0x10);
aes.IV = aes.Key;
using (var memoryStream = new MemoryStream())
{
using (
var cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(),
CryptoStreamMode.Write))
{
cryptoStream.Write(cipherBytes, 0, cipherBytes.Length);
cryptoStream.Flush();
}
//得到解密后的字节数组
buffer = memoryStream.ToArray();
}
}
}
catch
{
buffer = null;
}
return buffer;
} /// <summary>
/// 解密字符串
/// </summary>
/// <param name="cipherText">密文</param>
/// <param name="password">密钥</param>
/// <returns>解密后字符串</returns>
public static string DecryptString(string cipherText, string password)
{
byte[] decryptBytes = DecryptBytes(Convert.FromBase64String(cipherText), password);
if (decryptBytes == null)
{
return null;
}
return Encoding.UTF8.GetString(decryptBytes, 0, decryptBytes.Length);
} /// <summary>
/// 加密字节数组
/// </summary>
/// <param name="plainBytes">明文字节数组</param>
/// <param name="password">密钥</param>
/// <returns>加密后字节数组</returns>
public static byte[] EncryptBytes(byte[] plainBytes, string password)
{
byte[] buffer;
try
{
using (Aes aes = new AesManaged())
{
//设置密钥及密钥向量
aes.Key = new Rfc2898DeriveBytes(password, DefaultKey).GetBytes(0x10);
aes.IV = aes.Key;
using (var memoryStream = new MemoryStream())
{
using (
var cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(),
CryptoStreamMode.Write))
{
cryptoStream.Write(plainBytes, 0, plainBytes.Length);
cryptoStream.FlushFinalBlock();
}
//得到加密后的字节数组
buffer = memoryStream.ToArray();
}
}
}
catch
{
buffer = null;
}
return buffer;
} /// <summary>
/// 加密字符串
/// </summary>
/// <param name="plainText">明文</param>
/// <param name="password">密钥</param>
/// <returns>加密后字符串</returns>
public static string EncryptString(string plainText, string password)
{
byte[] cipherBytes = EncryptBytes(Encoding.UTF8.GetBytes(plainText), password);
if (cipherBytes == null)
{
return null;
}
return Convert.ToBase64String(cipherBytes);
}
}
使用AES加密的帮助类的更多相关文章
- AES加密解密 助手类 CBC加密模式
"; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...
- AES加密解密工具类封装(AESUtil)
package club.codeapes.common.utils; import org.springframework.util.Base64Utils; import javax.crypto ...
- php的AES加密、解密类
<?php /** * php.ios.Android 通用的AES加密.解密方法 */ namespace Common\Business; class AESCrypt { /** * 初始 ...
- 自写AES加密解密工具类
此类主要用于加密与解密,采用128位ECB模式,PKCS5Padding填充补位. 可使用方法为加密返回二进制encryptBin(content, key).加密返回十六进制encryptHex(c ...
- 使用AES加密的勒索类软件分析报告
报告名称: 某勒索类软件分析报告 作者: 李东 报告更新日期: 样本发现日期: 样本类型: 样本文件大小/被感染文件变化长度: 样本文件MD5 校验值: da4ab5e31793 ...
- AES加密解密的例子小结
话不多说,先放上代码,一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件),这里只贴出aesDemo.php,其他的看附件吧!aesDemo.php: 例子, ...
- 【Android工具】DES终结者加密时报——AES加密演算法
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...
- java独立小程序实现AES加密和解密
一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...
- php AES加密解密的例子
一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件) aesDemo.php:例子, <?php require_once('./AES.php'); // ...
随机推荐
- 学习第一个头文件stdio.h
使用标准输入输出库函数时要用到 “stdio.h”文件,因此源文件开头应有以下预编译命令: #include<stdio.h> stdio是standard input&outup ...
- Qt之HTTP上传/下载(继承QNetworkAccessManager,包括使用了authenticationRequired认证信号)
效果 QNetworkAccessManager DownloadNetworkManager::DownloadNetworkManager(QObject *parent) : QNetworkA ...
- DM365视频处理流程/DM368 NAND Flash启动揭秘
出自http://blog.csdn.net/maopig/article/details/7029930 DM365的视频处理涉及到三个相关处理器,分别是视频采集芯片.ARM处理器和视频图像协处理器 ...
- 在COM组件中调用JavaScript函数
转载自: http://blog.csdn.net/cheungmine/article/details/1451489 要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS) ...
- JVM命令行选项及GC日志
转:http://blog.csdn.net/q291611265/article/details/48028189 一.设置参数 在使用eclipse编译器的时候,可以采用以下的运行方式来设置虚拟机 ...
- Grunt制作个人博客简集
原文:http://www.gbtags.com/gb/share/4916.htm GitHub地址:http://yansm.github.io/fromone/
- Raphaël—JavaScript Library
Raphaël-JavaScript Library What is it? Raphaël is a small JavaScript library that should simplify yo ...
- [每日一题] OCP1z0-047 :2013-08-18 禁用启用约束――主键与外键 ..................................61
正确答案:C 根据题意,测试结果如下: 1.创建表emp,并且设emp_no字段为主键,设mgr_no字段为外键. gyj@MYDB> create table emp 2 (emp_no nu ...
- mysq优化
MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样可 ...
- HTML之学习笔记(二)颜色体系
html页面的颜色表示法有三种:英文表示,16进制表示和10进制表示.颜色通过三原色即红.绿.蓝三种按比例混合而成,如红色的10进制表示为255,0,0,即按照红色.绿色.蓝色的格式,权值取0~255 ...