[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var key = "cheayeon";
var iv = "encoding";
var text = "sb sb ha ha ha";
//对text,key iv 进行base64加密
var enKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(key));
var enIv = Convert.ToBase64String(Encoding.UTF8.GetBytes(iv));
var enText = Convert.ToBase64String(Encoding.UTF8.GetBytes(text));
//加密
var encryp = AesEncryp(enText, enKey,enIv);
//解密
var decryp = AesDecryp(encryp, enKey, enIv); }
/// <summary>
/// 加密密text
/// 王剑锋 2018年7月7日09:58:34
/// </summary>
/// <param name="text">明文</param>
/// <param name="key">秘钥,Base64串</param>
/// <param name="iv">向量,Base64串</param>
/// <returns></returns>
public string AesEncryp(string text,string key,string iv)
{
var aes = Aes.Create();
//AES-128-CBC PKCS#7
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
aes.BlockSize = 128;
//Base64解密text,KEY,IV,不够16位填充0
aes.Key = Padding16(Convert.FromBase64String(key),0);
aes.IV = Padding16(Convert.FromBase64String(iv),0);
//获取该算法规则下的加密器
var encryp = aes.CreateEncryptor();
//加密之前加一个Base64解密 ,要加密的数据
var dataBytes = Convert.FromBase64String(text);
//获取AES-128-CBC PKCS#7 密文
var enData = encryp.TransformFinalBlock(dataBytes,0, dataBytes.Length);
return Convert.ToBase64String(enData);
}
/// <summary>
/// 解密text
/// 王剑锋 2018年7月7日09:58:16
/// </summary>
/// <param name="text">密文</param>
/// <param name="key">秘钥,Base64串</param>
/// <param name="iv">向量,Base64串</param>
/// <returns></returns>
public string AesDecryp(string text, string key, string iv)
{
var aes = Aes.Create();
//AES-128-CBC PKCS#7
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
aes.BlockSize = 128;
//Base64解密text,KEY,IV
aes.Key = Padding16(Convert.FromBase64String(key),0);
aes.IV = Padding16(Convert.FromBase64String(iv),0);
//获取该算法规则下的解密器
var encryp = aes.CreateDecryptor();
//加密之前加一个Base64解密 ,要加密的数据
var dataBytes = Convert.FromBase64String(text);
//获取AES-128-CBC PKCS#7 明文
var enData = encryp.TransformFinalBlock(dataBytes, 0, dataBytes.Length);
return Encoding.UTF8.GetString(enData);
}
/// <summary>
/// 不够16位的整数倍,已指定字符填充
/// </summary>
/// <param name="array"></param>
/// <param name="padding"></param>
/// <returns></returns>
public byte[] Padding16(byte [] array,byte padding)
{
int group = (array.Length + 15) / 16;
var newArray = new byte[group*16];
for (int i = 0; i < newArray.Length; i++)
{
newArray[i] = (i < array.Length ? array[i] : padding);
}
return newArray;
}

  

微信AES-128-CBC加密解密的更多相关文章

  1. 微信小程序aes前后端加密解密交互

    aes前后端加密解密交互 小程序端 1. 首先引入aes.js /** * [description] CryptoJS v3.1.2 * [description] zhuangzhudada so ...

  2. golang AES/ECB/PKCS5 加密解密 url-safe-base64

    因为项目的需要用到golang的一种特殊的加密解密算法AES/ECB/PKCS5,但是算法并没有包含在标准库中,经过多次失败的尝试,终于解码成功,特此分享: /* 描述 : golang AES/EC ...

  3. php AES cbc模式 pkcs7 128位加密解密(微信小程序)

    PHP AES CBC模式PKCS7 128位加密 加密: $key = '1234567812345678'; $iv = '1234567890123456'; $message = '12345 ...

  4. JAVA AES CBC 加密 解密

    AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...

  5. javascript 与 PHP 通信加密,使用AES 128 CBC no padding,以及ios,java,c#文章例子

    运行环境 php7.0 不适用于 php7.0以上版本,因为mcrypt_encrypt()函数已删除 为何要采用 no padding 这种形式: AES加密如果原输入数据不够16字节的整数位,就要 ...

  6. IOS 与 PHP 通信加密,使用AES 128 CBC no padding

    这个网上的资料真实浩如烟海,但是真正有价值的屈指可数 自己尝试了一天多,终于还是搞定了. 再次要感谢网上的前辈么. 比如下面这个关于php和java端的实现: http://my.oschina.ne ...

  7. AES字节数组加密解密流程

    AES类时微软MSDN中最常用的加密类,微软官网也有例子,参考链接:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.crypto ...

  8. python AES 双向对称加密解密

    高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...

  9. Java使用AES算法进行加密解密

    一.加密 /** * 加密 * @param src 源数据字节数组 * @param key 密钥字节数组 * @return 加密后的字节数组 */ public static byte[] En ...

  10. 使用java实现对称加密解密(AES),非对称加密解密(RSA)

    对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ...

随机推荐

  1. NIOS EDS最容易出错的地方

    越来越多的人使用NIOS II.毕竟,NIOS II是世界上功能最多的软核处理器. NIOS EDS通常是在装QUARTUS的时候一起装上的.通常我们在用的时候都是以模板建立工程的. 在很多情况下,我 ...

  2. npm国内镜像介绍

    这个也是网上搜的,亲自试过,非常好用! 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set reg ...

  3. django-settings.py配置

    django settings 详细资料 ############ 开始项目 python3.5 pip -m install django==1.11.7 指定版本安装 pip3 install d ...

  4. python开发函数进阶:装饰器

    一,装饰器本质 闭包函数 功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 作用:解耦,尽量的让代码分离,小功能之前的分离. 解耦目的,提高代码的重用性 二,设计模式 开放封闭原则 ...

  5. 在richtextbox中获取最真实的字符串像素大小

    设计器: partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.Com ...

  6. 关于 Mybatis的原生连接池 和 DBCP 连接池

    一 遇到的问题:  项目用的play框架,数据库DB2, 持久化框架是Mybatis, 连接池用的是Mybatis原生的,遇到的问题是:有时候抛出如下异常: play.api.UnexpectedEx ...

  7. Android 4 学习(13):Local Broadcast Manager & Intent Filter

    参考<Professional Android 4 Development> Local Broadcast Manager 简介 Local Broadcast Manager由Andr ...

  8. QR 码的位置检测符

    QR码的位置检测符由三个同心正方形叠加而成.分别为: 7*7 modules的黑色正方形: 5*5 modules的白色正方形 : 3*3modules的黑色正方形. 三个用于定位检测的“回”形符号应 ...

  9. Hadoop Serialization(third edition)hadoop序列化详解(最新版) (1)

    初学java的人肯定对java序列化记忆犹新.最开始很多人并不会一下子理解序列化的意义所在.这样子是因为很多人还是对java最底层的特性不是特别理解,当你经验丰富,对java理解更加深刻之后,你就会发 ...

  10. 2&nbsp;时间管理和内存管理

    时间管理 uC/OS-II的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次(这个时间片段是OS的作者推荐的,大家可以参考邵贝贝翻译的<嵌入式实时操作系统ucos-I ...