微信AES-128-CBC加密解密
[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加密解密的更多相关文章
- 微信小程序aes前后端加密解密交互
aes前后端加密解密交互 小程序端 1. 首先引入aes.js /** * [description] CryptoJS v3.1.2 * [description] zhuangzhudada so ...
- golang AES/ECB/PKCS5 加密解密 url-safe-base64
因为项目的需要用到golang的一种特殊的加密解密算法AES/ECB/PKCS5,但是算法并没有包含在标准库中,经过多次失败的尝试,终于解码成功,特此分享: /* 描述 : golang AES/EC ...
- php AES cbc模式 pkcs7 128位加密解密(微信小程序)
PHP AES CBC模式PKCS7 128位加密 加密: $key = '1234567812345678'; $iv = '1234567890123456'; $message = '12345 ...
- JAVA AES CBC 加密 解密
AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...
- javascript 与 PHP 通信加密,使用AES 128 CBC no padding,以及ios,java,c#文章例子
运行环境 php7.0 不适用于 php7.0以上版本,因为mcrypt_encrypt()函数已删除 为何要采用 no padding 这种形式: AES加密如果原输入数据不够16字节的整数位,就要 ...
- IOS 与 PHP 通信加密,使用AES 128 CBC no padding
这个网上的资料真实浩如烟海,但是真正有价值的屈指可数 自己尝试了一天多,终于还是搞定了. 再次要感谢网上的前辈么. 比如下面这个关于php和java端的实现: http://my.oschina.ne ...
- AES字节数组加密解密流程
AES类时微软MSDN中最常用的加密类,微软官网也有例子,参考链接:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.crypto ...
- python AES 双向对称加密解密
高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...
- Java使用AES算法进行加密解密
一.加密 /** * 加密 * @param src 源数据字节数组 * @param key 密钥字节数组 * @return 加密后的字节数组 */ public static byte[] En ...
- 使用java实现对称加密解密(AES),非对称加密解密(RSA)
对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ...
随机推荐
- DHCP(三)
选择阶段:即DHCP客户端选择IP地址的阶段.如果有多台DHCP服务器向该客户端发来DHCP Offer报文,客户端只接受第一个收到的DHCP Offer报文,然后以广播方式发送DHCP Reques ...
- 第13章 Spring框架的设计理念与设计模式分析
13.1 Spring的骨骼架构 最核心的组件是:Core, Context, Bean. 13.1.1 Spring的设计理念 Spring最核心的组件是Bean组件.Spring解决的最关键的问题 ...
- Betsy's Tour 漫游小镇(dfs)
Description 一个正方形的镇区分为 N2 个小方块(1 <= N <= 7).农场位于方格的左上角,集市位于左下角.贝茜穿过小镇,从左上角走到左下角,刚好经过每个方格一次.当 N ...
- dom方式解析xml文件的步骤
使用java类即可
- Objects & Class
[Objects & Class] 1.定义一个类. 上述代码中,numberOfSides是实例变量,simpleDescription也是实例方法. 2.创建实例,使用实例. 3.init ...
- Opencv3 Mat对象构造函数与常用方法
构造函数 Mat() Mat(int rows,int cols,int type) Mat(Size size,int type) Mat(int rows,int cols,int type,co ...
- solr第二天 京东案例 课程文档 有用
全文检索技术 Lucene&Solr Part3 1. 课程计划 1. Solr配置中文分析器 a) Schema.xml的配置 b) 配置IKAnalyzer ...
- 性能优化之_android多线程
本文大纲为: 如何创建线程 线程间如何通讯 线程间如何安全的共享信息 一.线程的创建 Thread在run方法中执行具体事务,或者传入一个runnable对象,但是不能调用view控件的更新方法,但是 ...
- FlyweightPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...
- python-memcached模块
memcache memcache介绍 memcache概念 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库 ...