AESRijndael加密
/// <summary>/// AESRijndael/// </summary>public class AESRijndael{/// <summary>/// 检验密钥是否有效长度【16|24|32】/// </summary>/// <param name="key">密钥</param>/// <returns>bool</returns>public static bool CheckRijndaelKey(string key){if (string.IsNullOrWhiteSpace(key))return false;if (16.Equals(key.Length) || 24.Equals(key.Length) || 32.Equals(key.Length))return true;elsereturn false;}/// <summary>/// 检验向量是否有效长度【16】/// </summary>/// <param name="iv">向量</param>/// <returns>bool</returns>public static bool CheckRijndaelIV(string iv){if (string.IsNullOrWhiteSpace(iv))return false;if (16.Equals(iv.Length))return true;elsereturn false;}/// <summary>/// Rijndael加密/// </summary>/// <param name="data">被加密的明文</param>/// <param name="dataEncoding">要加密字符串加载时编码方式</param> /// <param name="key">密钥</param>/// <param name="vector">向量</param> /// <param name="cipherMode">对称算法的运算模式</param> /// <param name="paddingMode">对称算法中使用的填充模式</param> /// <returns>返回Base64String密文</returns>public static string RijndaelEncrypt(string data, Encoding dataEncoding, string key, string vector, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7){return RijndaelEncrypt(dataEncoding.GetBytes(data), key, vector, cipherMode, paddingMode);}/// <summary>/// Rijndael加密/// </summary>/// <param name="dataBytes">被加密的明文</param>/// <param name="key">密钥</param>/// <param name="vector">向量</param> /// <param name="cipherMode">对称算法的运算模式</param> /// <param name="paddingMode">对称算法中使用的填充模式</param> /// <returns>返回Base64String密文</returns>public static string RijndaelEncrypt(byte[] dataBytes, string key, string vector, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7){byte[] cryptoBytes = null;try{using (RijndaelManaged aes = new RijndaelManaged()){aes.Key = Encoding.UTF8.GetBytes(key);aes.IV = Encoding.UTF8.GetBytes(vector);aes.Mode = cipherMode;aes.Padding = paddingMode;using (MemoryStream ms = new MemoryStream()){using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write)){cs.Write(dataBytes, 0, dataBytes.Length);cs.FlushFinalBlock();cryptoBytes = ms.ToArray();}}}}catch{cryptoBytes = null;}return Convert.ToBase64String(cryptoBytes);}/// <summary>/// Rijndael解密/// </summary>/// <param name="data">被解密的密文</param>/// <param name="dataEncoding">解密字符串返回的编码方式</param> /// <param name="key">密钥</param>/// <param name="vector">向量</param> /// <param name="cipherMode">对称算法的运算模式</param> /// <returns>返回指定编码明文</returns>public static string RijndaelDecrypt(string data, Encoding dataEncoding, string key, string vector, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7){return dataEncoding.GetString(RijndaelDecrypt(data, key, vector, cipherMode, paddingMode));}/// <summary>/// Rijndael解密/// </summary>/// <param name="data">被解密的密文</param>/// <param name="key">密钥</param>/// <param name="vector">向量</param> /// <param name="cipherMode">对称算法的运算模式</param> /// <param name="paddingMode">对称算法中使用的填充模式</param> /// <returns>返回指定编码明文</returns>public static byte[] RijndaelDecrypt(string data, string key, string vector, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7){byte[] dataBytes = Convert.FromBase64String(data);byte[] cryptoBytes = null;try{using (RijndaelManaged aes = new RijndaelManaged()){aes.Key = Encoding.UTF8.GetBytes(key);aes.IV = Encoding.UTF8.GetBytes(vector);aes.Mode = cipherMode;aes.Padding = paddingMode;using (MemoryStream ms = new MemoryStream(dataBytes)){using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read)){using (MemoryStream originalMemory = new MemoryStream()){byte[] bufferBytes = new byte[1024];int bytesRead = 0;while ((bytesRead = cs.Read(bufferBytes, 0, bufferBytes.Length)) > 0){originalMemory.Write(bufferBytes, 0, bytesRead);}cryptoBytes = originalMemory.ToArray();}}}}}catch (Exception ex){cryptoBytes = null;}return cryptoBytes;}}
转载于:https://www.cnblogs.com/tlmbem/p/10800751.html
AESRijndael加密相关推荐
- [转]信息安全相关理论题(二)
27.在工程实施之前,验收方可以不给施工方弱电布线图纸,但施工结束后必须有图纸 A. 对 B. 错 您的答案: 标准答案: B 28.在OSI七层协议中,提供一种建立连接并有序传输数据的方法的层是 A ...
- RSA签名算法,计算调用加密报文,安全传输
RSA签名算法 1. 获取当前的时间戳参数 2. 计算参数签名 3. 获取请求对象的MD5密文 4. 通过私钥计算某个参数的RSA签名 5. 转换字符集到utf8 6. MD5加密字符串 7. bas ...
- 2022-2028年中国加密货币行业市场研究及前瞻分析报告
[报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国加密货币行业市场行业相关概述.中国加密货 ...
- 2022-2028年中国加密货币交易所市场研究及前瞻分析报告
[报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国加密货币交易所行业市场行业相关概述.中国 ...
- 加解密基础——(对称加密、非对称加密和混合加密)
本文对之前学习过的加解密相关知识做一简单总结,以备后用. 1. 基本概念 加密算法 通常是复杂的数学公式,这些公式确定如何将明文转化为密文的过程和规则. 密钥 是一串被加入到算法中的随机比特. 待续 ...
- 如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)
上篇文章说到接口安全的设计思路,如果没有看到上篇博客,建议看完再来看这个. 通过园友们的讨论,以及我自己查了些资料,然后对接口安全做一个相对完善的总结,承诺给大家写个demo,今天一并放出. 对于安全 ...
- aes前台加密后台解密
aes加密npm地址:https://www.npmjs.com/package/crypto-js aes加密git地址/下载: https://github.com/brix/crypto-js ...
- 牛腩44 整合登陆页 RequiredFieldValidator 和 ValidationSummary 以及 asp.net 自带的MD5 加密...
在我们后台登陆的时候,有 用户名,密码和验证码3个必选项,所以我们托3个验证控件过来 例如这里,如果没有填写用户名,当点提交的时候,显示 红色的 * 号,并且弹出一个 alert 效果如下 ...
- Sql存储过程加密和解密
可用于加密SQL存储过程或者触发器(这是SQL Server本身提供的,也就是说这是微软的加密算法) http://www.mscto.com 使用 WITH ENCRYPTION 选项 WITH E ...
最新文章
- BZOJ 4059: [Cerc2012]Non-boring sequences ( )
- 写CSDN插入图片一直无法显示?
- 基于哈希算法的web账户口令存储方法
- intellij2018使用2019的主题
- ABAP和Java单例模式的攻防
- In the beginning, many people on Wall Street did
- Python2.x vs Python3
- 2015年总结与2016年目标
- Python标准库映射类型与可散列数据类型的关系
- 限制用户不能删除SharePoint列表中的条目(项目)
- linux部署rabbit mq,Linux安装rabbitmq遇到的问题
- 利用VBA将表格保存为PDF文件
- 电脑出现问题,你的PIN不可用。请单击以重新设置。
- 来个水帖:下载Dev
- 在html中打字如何变大,怎么把网页的字变大?教你网页操作实用技巧【步骤详解】...
- CF1442D Sum 分治 背包dp
- TCP状态转换图文解说
- 什么软件有html5游戏,多款好玩HTML5小游戏带你认识HTML5优势
- vue3 项目搭建以及使用
- 怎么还原计算机网络,怎么把网络协议还原为默认设置
热门文章
- (四)在MLOps管道中进行持续训练
- ONNX系列五 --- 在C#中使用可移植的ONNX AI模型
- .NET Core/标准自动增量版本控制
- python学生管理系统(函数方法)_(python函数)学生管理系统
- oracle 时间按季度,ORACLE时间字段取年、月、日、季度
- 通过nginx反向代理解决跨域
- .net mvc html使用方法,C# ASP.NET MVC HtmlHelper用法汇总
- 计算机科学与技术做什么实验,计算机科学与技术专业实验教学大纲
- go mysql id为0_go 语言中mysql操作200万数据时应该如何写?
- python脚本运行命令_从Python脚本运行shell命令