C#几种常用的加密方式
2021-07-01 19:06
标签:12c ash ++ static 64位 生成xml convert 循环 分组 一、AES加密算法 C#几种常用的加密方式 标签:12c ash ++ static 64位 生成xml convert 循环 分组 原文地址:https://www.cnblogs.com/roboot/p/9944747.html
AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。
AES是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 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
{
///
二、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 };
///
三、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";
///
四、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 )
{
md_str += buffer[i].ToString("x2");
}
return md_str;
}
}
}
以上内容大部分摘自网络,代码根据网上的改的,简单测试过。