C#常用加密方式

一、AES加密算法AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。 摘自:互动百科几种模式的优缺点对比:C#代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;namespace PwdDemo
{public class AESHelper{/// <summary>///  AES 加密/// </summary>/// <param name="str">明文(待加密)</param>/// <param name="key">密文</param>/// <returns></returns>public string AesEncrypt(string str, string key){if (string.IsNullOrEmpty(str)) return null;Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);RijndaelManaged rm = new RijndaelManaged{Key = Encoding.UTF8.GetBytes(key),Mode = CipherMode.ECB,Padding = PaddingMode.PKCS7};ICryptoTransform cTransform = rm.CreateEncryptor();Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return Convert.ToBase64String(resultArray);}/// <summary>///  AES 解密/// </summary>/// <param name="str">明文(待解密)</param>/// <param name="key">密文</param>/// <returns></returns>public string AesDecrypt(string str, string key){if (string.IsNullOrEmpty(str)) return null;Byte[] toEncryptArray = Convert.FromBase64String(str);RijndaelManaged rm = new RijndaelManaged{Key = Encoding.UTF8.GetBytes(key),Mode = CipherMode.ECB,Padding = PaddingMode.PKCS7};ICryptoTransform cTransform = rm.CreateDecryptor();Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return Encoding.UTF8.GetString(resultArray);}}
}
二、DES加密算法DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。C#代码:using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;namespace PwdDemo
{public class DESHelper{//密钥public static byte[] _KEY  = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };//向量public static byte[] _IV = new byte[] { 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01 };   /// <summary>/// DES加密操作/// </summary>/// <param name="normalTxt"></param>/// <returns></returns>public string DesEncrypt(string normalTxt){//byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(_KEY);//byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(_IV);
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();int i = cryptoProvider.KeySize;MemoryStream ms = new MemoryStream();CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(_KEY, _IV), CryptoStreamMode.Write);StreamWriter sw = new StreamWriter(cst);sw.Write(normalTxt);sw.Flush();cst.FlushFinalBlock();sw.Flush();string strRet = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);return strRet;}/// <summary>/// DES解密操作/// </summary>/// <param name="securityTxt">加密字符串</param>/// <returns></returns>public string DesDecrypt(string securityTxt)//解密  
        {//byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(_KEY);//byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(_IV);byte[] byEnc;try{securityTxt.Replace("_%_", "/");securityTxt.Replace("-%-", "#");byEnc = Convert.FromBase64String(securityTxt);}catch{return null;}DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();MemoryStream ms = new MemoryStream(byEnc);CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(_KEY, _IV), CryptoStreamMode.Read);StreamReader sr = new StreamReader(cst);return sr.ReadToEnd();}}
}
三、RSA加密算法RSA是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。C#代码:using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;namespace PwdDemo
{public class RSAHelper{private const int RsaKeySize = 2048;private const string publicKeyFileName = "RSA.Pub";private const string privateKeyFileName = "RSA.Private";/// <summary>///在给定路径中生成XML格式的私钥和公钥。/// </summary>public void GenerateKeys(string path){using (var rsa = new RSACryptoServiceProvider(RsaKeySize)){try{// 获取私钥和公钥。var publicKey = rsa.ToXmlString(false);var privateKey = rsa.ToXmlString(true);// 保存到磁盘
                    File.WriteAllText(Path.Combine(path, publicKeyFileName), publicKey);File.WriteAllText(Path.Combine(path, privateKeyFileName), privateKey);//Console.WriteLine(string.Format("生成的RSA密钥的路径: {0}\\ [{1}, {2}]", path, publicKeyFileName, privateKeyFileName));
                }finally{rsa.PersistKeyInCsp = false;}}}/// <summary>/// 用给定路径的RSA公钥文件加密纯文本。/// </summary>/// <param name="plainText">要加密的文本</param>/// <param name="pathToPublicKey">用于加密的公钥路径.</param>/// <returns>表示加密数据的64位编码字符串.</returns>public string Encrypt(string plainText, string pathToPublicKey){using (var rsa = new RSACryptoServiceProvider(RsaKeySize)){try{//加载公钥var publicXmlKey = File.ReadAllText(pathToPublicKey);rsa.FromXmlString(publicXmlKey);var bytesToEncrypt = System.Text.Encoding.Unicode.GetBytes(plainText);var bytesEncrypted = rsa.Encrypt(bytesToEncrypt, false);return Convert.ToBase64String(bytesEncrypted);}finally{rsa.PersistKeyInCsp = false;}}}/// <summary>/// Decrypts encrypted text given a RSA private key file path.给定路径的RSA私钥文件解密 加密文本/// </summary>/// <param name="encryptedText">加密的密文</param>/// <param name="pathToPrivateKey">用于加密的私钥路径.</param>/// <returns>未加密数据的字符串</returns>public string Decrypt(string encryptedText, string pathToPrivateKey){using (var rsa = new RSACryptoServiceProvider(RsaKeySize)){try{var privateXmlKey = File.ReadAllText(pathToPrivateKey);rsa.FromXmlString(privateXmlKey);var bytesEncrypted = Convert.FromBase64String(encryptedText);var bytesPlainText = rsa.Decrypt(bytesEncrypted, false);return System.Text.Encoding.Unicode.GetString(bytesPlainText);}finally{rsa.PersistKeyInCsp = false;}}}}
}
四、SHA加密算法SHA,全称SecureHashAlgorithm,是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。C#代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;namespace PwdDemo
{public class SHAHelper{public string SHAmd5Encrypt(string normalTxt){var bytes = Encoding.Default.GetBytes(normalTxt);//求Byte[]数组  var Md5 = new MD5CryptoServiceProvider();var encryptbytes = Md5.ComputeHash(bytes);//求哈希值  return Base64To16(encryptbytes);//将Byte[]数组转为净荷明文(其实就是字符串)  
        }public string SHA1Encrypt(string normalTxt){var bytes = Encoding.Default.GetBytes(normalTxt);var SHA = new SHA1CryptoServiceProvider();var encryptbytes = SHA.ComputeHash(bytes);return Base64To16(encryptbytes);}public string SHA256Encrypt(string normalTxt){var bytes = Encoding.Default.GetBytes(normalTxt);var SHA256 = new SHA256CryptoServiceProvider();var encryptbytes = SHA256.ComputeHash(bytes);return Base64To16(encryptbytes);}public string SHA384Encrypt(string normalTxt){var bytes = Encoding.Default.GetBytes(normalTxt);var SHA384 = new SHA384CryptoServiceProvider();var encryptbytes = SHA384.ComputeHash(bytes);return Base64To16(encryptbytes);}public string SHA512Encrypt(string normalTxt){var bytes = Encoding.Default.GetBytes(normalTxt);var SHA512 = new SHA512CryptoServiceProvider();var encryptbytes = SHA512.ComputeHash(bytes);return Base64To16(encryptbytes);}private string Base64To16(byte[] buffer){string md_str = string.Empty;for (int i = 0; i < buffer.Length; i++){md_str += buffer[i].ToString("x2");}return md_str;}}
}

 

转载于:https://www.cnblogs.com/Denghejing/p/9560401.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言写文件到txt里有屯字,C语言10 文件.ppt

第十章 文件C文件概述文件类型指针文件的打开与关闭文件的读写文件的定位出错的检测赂恰滔氢戳骏市蔫盒少郴害篆汤看拴掳驮泅戈呕压琐憨波褪队敛紫爸戏仅C语言10 文件C语言10 文件10.1 C文件概述文件&#xff1a;存储在外部介质上数据的集合,是操作系统数据管理的单位文件分类按…

java中volatile的使用方式

2019独角兽企业重金招聘Python工程师标准>>> 转载地址&#xff1a; http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 转载于:https://my.oschina.net/wangfree/blog/122664

python socketio_flask-socketio实现WebSocket的方法

【flask-socektio】之前不知道在哪个场合下提到过如何从web后台向前台推送消息。听闻了反向ajax技术这种模式之后&#xff0c;大呼神奇&#xff0c;试了一下之后发现也确实可以用。不过&#xff0c;反向ajax的代价也很明显&#xff0c;只要客户端还和服务端要有信息交互&#x…

linux文件编程(1)—— open、write、read、lseek、阻塞问题(ps文件操作/文件描述符/重定向原理/缓冲区/标准错误)

参考&#xff1a;linux文件编程&#xff08;1&#xff09;—— 常用API之open、write、read、lseek 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-08 22:19:28 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115209134 【Linux】文件操…

最大流自用模板(例题:HDU1532)

三种模板&#xff1a;Edmonds_Karp&#xff0c;Dinic&#xff0c;SAP 例题&#xff1a; Drainage Ditches&#xff08;HDU1532&#xff09; Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22365 Accepted Sub…

安卓手机python数据可视化_python 数据可视化

# -*- coding:utf-8 -*-# 异常值处理import pandas as pdaimport numpy as npyimport matplotlibmatplotlib.use(Agg)import matplotlib.pyplot as pylimport iodef index(data):# 输出结果必须为字典outputoutput {}# data pda.read_excel("D:/taobao2.xls")data …

$_SERVER

PHP $_SERVER 变量 $_SERVER 是一个包含诸如头信息&#xff08;header&#xff09;、路径&#xff08;path&#xff09;和脚本位置&#xff08;script locations&#xff09;的数组。它是 PHP 中一个超级全局变量&#xff0c;我们可以在 PHP 程序的任何地方直接访问它。 $_SERV…

linux文件编程(4)—— 用ANSIC标准C库函数进行文件编程:fopen、fread、fwrite、fseek

参考&#xff1a;linux文件编程&#xff08;5&#xff09;—— 用ANSIC标准中的C库函数进行文件编程 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-11 11:58:25 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115209680 部分参照&#…

swig封装 c语言函数到python库,python swig 调用C/C++接口

转载&#xff1a;https://www.cnblogs.com/dda9/p/8612068.html当你觉得python慢的时候&#xff0c;当你的c/c代码难以用在python上的时候&#xff0c;你可能会注意这篇文章。swig是一个可以把c/c代码封装为python库的工具。(本文封装为python3的库)文章结构整体看封装只使用py…

Java学习---面试基础知识点总结

Java中sleep和wait的区别① 这两个方法来自不同的类分别是&#xff0c;sleep来自Thread类&#xff0c;和wait来自Object类。sleep是Thread的静态类方法&#xff0c;谁调用的谁去睡觉&#xff0c;即使在a线程里调用b的sleep方法&#xff0c;实际上还是a去睡觉&#xff0c;要让b线…

python中的语言特性_python自测——语言特性

语言特性1.谈谈对 Python 和其他语言的区别答&#xff1a;Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库&#xff0c;他是一门强类型的可移植、可扩展&#xff0c;可嵌入的解释型编程语言&#xff0c;属于动态语言。拿 C 语言和 Python 比&…

使用NPOI和委托做EXCEL导出

首先&#xff0c;在用NPOI导出时&#xff0c;学习了邀月这篇文章NPOI根据Excel模板生成原生的Excel文件实例&#xff0c;在这里先行谢过了。 本篇文章在邀月的基本上&#xff0c;做了一些小的改动&#xff0c;加上委托的机制。因为在做导出时&#xff0c;加载模板&#xff0c;下…

全国计算机等级考试题库二级C操作题100套(第63套)

第63套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;有NN矩阵&#xff0c;根据给定的m&#xff08;m<N&#xff09;值&#xff0c;将每行元素中的值均右移m个位置&#xff0c;左边置为0。例如&#xff0c;N3&#xff0c;m2&#xff0c;有下列矩阵 1 2 3…

android 放大镜功能,简单实现Android放大镜效果

利用之前学过的图形图像绘画技术和图片添加特效技术&#xff0c;我们来实现一个Android放大镜的简单应用。最终效果如图具体实现:用来显示自定义的绘图类的布局文件res/layout/main.xml:xmlns:tools"http://schemas.android.com/tools"android:layout_width"fil…

python直方图拟合曲线_在直方图python中拟合非标准化高斯

我有一个暗图像(原始格式)&#xff0c;并绘制图像的图像和分布 . 正如您所看到的那样&#xff0c;在16处有一个高峰&#xff0c;请忽略它 . 我想通过这个直方图拟合高斯曲线 . 我已经使用这种方法来适应&#xff1a;Un-normalized Gaussian curve on histogram . 然而;我的高斯…

nodejs之express入门

首先安装nodejs&#xff0c;官网下载安装包直接安装&#xff0c; 由于node自带npm&#xff0c;所以npm命令直接即可使用 打开cmd&#xff0c;使用npm install -g express-generator安装express 然后express -e webapp 回车 一个express项目就生成了&#xff0c;简单的不能再简单…

全国计算机等级考试题库二级C操作题100套(第64套)

第64套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;将a所指35矩阵中第k列的元素左移到第0 列&#xff0c;第k列以后的每列元素行依次左移&#xff0c;原来左边的各列依次绕到右边。 例如&#xff0c;有下列矩阵&#xff1a; 1 2 3 4 5 1 2 3 4 5 1 2 3 4 …

android 音乐播放器的状态栏通知,Android仿虾米音乐播放器之通知栏notification解析...

通知栏notification是Android中一个很重要的组件&#xff0c;可以在顶部状态栏中存在&#xff0c;用户也可以通过此来操作应用&#xff0c;在Android中只有3.0以上的版本才加入了notification的按钮点击功能。先看一下仿虾米写出来的通知的效果这是一个自定义的notification&am…

mysql 查询语句_SQL语言mysql基础查询语句

单表查询、条件查询、查询并排序、限制结果查询、查询并排名、分组聚合查询、-- DQL操作&#xff0c;数据基本查询语言使用----------------------------------------------------------------------------------------------- -- 创建数据表-- 注释&#xff1a;员工编号&#…

Android NDK学习(七):NDK 编译支持 C++特有的库

如果你的C代码中出现了很多C特有的库&#xff0c;例如<iostream>,<list>等&#xff0c;那么你还需要在jni的文件夹下添加一个Application.mk文件&#xff0c;文件内容为&#xff1a; APP_STL : stlport_static APP_STL : gnustl_static 示例 Application.mk &#…