2023年7月27日发(作者:)
常⽤密钥算法⼀、数据加密/编码算法列表
常见⽤于保证安全的加密或编码算法如下:
1、常⽤密钥算法
密钥算法⽤来对敏感数据、摘要、签名等信息进⾏加密,常⽤的密钥算法包括:
DES(Data Encryption Standard):数据加密标准,速度较快,适⽤于加密⼤量数据的场合;
3DES(Triple DES):是基于DES,对⼀块数据⽤三个不同的密钥进⾏三次加密,强度更⾼;
RC2和 RC4:⽤变长密钥对⼤量数据进⾏加密,⽐ DES 快;
IDEA(International Data Encryption Algorithm)国际数据加密算法,使⽤ 128 位密钥提供⾮常强的安全性;
RSA:由 RSA 公司发明,是⼀个⽀持变长密钥的公共密钥算法,需要加密的⽂件快的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是⼀种标准的 DSS(数字签名标准);
AES(Advanced Encryption Standard):⾼级加密标准,是下⼀代的加密算法标准,速度快,安全级别⾼,⽬前 AES 标准的⼀个实现是 Rijndael 算法;
BLOWFISH,它使⽤变长的密钥,长度可达448位,运⾏速度很快;
其它算法,如ElGamal、Deffie-Hellman、新型椭圆曲线算法ECC等。
2、单向散列算法
单向散列函数⼀般⽤于产⽣消息摘要,密钥加密等,常见的有:
MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的⼀种单向散列算法,MD5被⼴泛使⽤,可以⽤来把不同长度的数据块进⾏暗码运算成⼀个128位的数值;
SHA(Secure Hash Algorithm)这是⼀种较新的散列算法,可以对任意长度的数据运算⽣成⼀个160位的数值;
MAC(Message Authentication Code):消息认证代码,是⼀种使⽤密钥的单向函数,可以⽤它们在系统上或⽤户之间认证⽂件或消息。HMAC(⽤于消息认证的密钥散列法)就是这种函数的⼀个例⼦。
CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能⼒强,被⼴泛使⽤在各种数据校验应⽤中。占⽤系统资源少,⽤软硬件均能实现,是进⾏数据传输差错检测地⼀种很好的⼿段(CRC 并不是严格意义上的散列算法,但它的作⽤与散列算法⼤致相同,所以归于此类)。
3、其它数据算法
其它数据算法包括⼀些常⽤编码算法及其与明⽂(ASCII、Unicode 等)转换等,如 Base 64、Quoted Printable、EBCDIC 等。
⼆、算法的 .NET 实现
常见的加密和编码算法都已经在 .NET Framework中得到了实现,为编码⼈员提供了极⼤的便利性,实现这些算法的名称空间是:graphy。
graphy 命名空间提供加密服务,包括安全的数据编码和解码,以及许多其他操作,例如散列法、随机数字⽣成和消息⾝份验证。
graphy 是按如下⽅式组织的:
1、私钥加密
私钥加密⼜称为对称加密,因为同⼀密钥既⽤于加密⼜⽤于解密。私钥加密算法⾮常快(与公钥算法相⽐),特别适⽤于对较⼤的数据流执⾏加密转换。 .NET Framework 提供以下实现私钥加密算法的类:
DES:DESCryptoServiceProviderRC2:RC2CryptoServiceProviderRijndael(AES):RijndaelManaged3DES:TripleDESCryptoServiceProvider2、公钥加密和数字签名
公钥加密使⽤⼀个必须对未经授权的⽤户保密的私钥和⼀个可以对任何⼈公开的公钥。⽤公钥加密的数据只能⽤私钥解密,⽽⽤私钥签名的数据只能⽤公钥验证。公 钥可以被任何⼈使⽤;该密钥⽤于加密要发送到私钥持有者的数据。两个密钥对于通信会话都是唯⼀的。公钥加密算法也称为不对称算法,原因是需要⽤⼀个密钥加 密数据⽽需要⽤另⼀个密钥来解密数据。
.NET Framework 提供以下实现公钥加密算法的类:
DSA:DSACryptoServiceProviderRSA:RSACryptoServiceProvider3、哈希(Hash)值
哈希算法将任意长度的⼆进制值映射为固定长度的较⼩⼆进制值,这个⼩的⼆进制值称为哈希值。哈希值是⼀段数据唯⼀且极其紧凑的数值表⽰形式。如果散列⼀段 明⽂⽽且哪怕只更改该段落的⼀个字母,随后的哈希都将产⽣不同的值。要找到散列为同⼀个值的两个不同的输⼊,在计算上是不可能的,所以数据的哈希值可以检 验数据的完整性。
.NET Framework 提供以下实现数字签名算法的类:
HMAC:HMACSHA1 (HMAC 为⼀种使⽤密钥的 Hash 算法)MAC:MACTripleDESMD5:MD5CryptoServiceProviderSHA1:SHA1Managed、SHA256Managed、SHA384Managed、12Managed4、随机数⽣成
加密密钥需要尽可能地随机,以便使⽣成的密钥很难再现,所以随机数⽣成是许多加密操作不可分割的组成部分。
在 .NET Framework 中,RNGCryptoServiceProvider 是随机数⽣成器算法的实现,对于数据算法,.NET Framework 则在其它命名空间中实现,如 Convert 类实现 Base 64 编码, 来实现编码⽅式的转换等。
从以上来看,.NET Framework 对于数据加密/编码还是⽀持⽐较好,⼤⼤地⽅便了开发⼈员,但美中不⾜的是,.NET Framework中的数据加密算法仍然不够完全,如 IDEA、BLOWFISH、其它算法,如ElGamal、Deffie-Hellman、ECC 等,对于⼀些其它的数据校验算法⽀持也不够,如 CRC、SFV 等,开发⼈员只能去从早期代码做移植或者寻找第三⽅⼚商的实现。
下⾯本就简单介绍在项⽬中常⽤的加密及解密的⽅法
⼀、MD5加密算法
[.NET类库中⾃带的算法 MD5是个不可逆的算法 没有解密的算法]
其实在编程中加密数据。在DotNet中有⾃带的类:
sswordForStoringInConfigFile()
public string md5(string str,int code)
{
if(code==16) //16位MD5加密(取32位加密的9~25字符)
{
return sswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;
}
if(code==32) //32位加密
{
return sswordForStoringInConfigFile(str,"MD5").ToLower();
}
return "00000000";
} 简单的使⽤:
//--导⼊所需要的包
using ;
using ;
using graphy;
(1)MD5普通加密
//获取要加密的字段,并转化为Byte[]数组
byte[] data = e
.GetBytes(Array());
//建⽴加密服务
5 md5 = new 5CryptoServiceProvider();
//加密Byte[]数组
byte[] result = eHash(data);
= "MD5普通加密:" + ing(result);
(2)MD5密码加密[常⽤]
= "MD5密码加密:" + sswordForStoringInConfigFile(, "MD5");
(3)中加密与解密QueryString的⽅法[常⽤]
//加密
ct("?id=" + 64String
(es("whaben")).Replace("+","+"));
//解密
string ID = ing
(se64String(tring["id"].ToString().Replace("+","+")));
⼆、DES加密及解密的算法[常⽤密钥算法]
简单的使⽤:
//--导⼊所需要的包
using ;
using ;
using graphy;
public static string Key = "DKMAB5DE";//加密密钥必须为8位
//加密算法
public static string MD5Encrypt(string pToEncrypt)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = es(pToEncrypt);
= es(Key);
= es(Key);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, Encryptor(), );
(inputByteArray, 0, );
inalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in y())
{
Format("{0:X2}", b);
}
ng();
return ng();
}
//解密算法
public static string MD5Decrypt(string pToDecrypt)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = new byte[ / 2];
for (int x = 0; x < / 2; x++)
{
int i = (32(ing(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
} = es(Key);
= es(Key);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, Decryptor(), );
(inputByteArray, 0, );
inalBlock();
StringBuilder ret = new StringBuilder();
return ing(y());
}
三、RSA加密及解密的算法[常⽤密钥算法]
简单的使⽤:
//--导⼊所需要的包
using ;
using graphy;
//加密算法
public string RSAEncrypt(string encryptString)
{
CspParameters csp = new CspParameters();
tainerName = "whaben";
RSACryptoServiceProvider RSAProvider = new RSACryptoServiceProvider(csp);
byte[] encryptBytes = t(es(encryptString), true);
string str = "";
foreach (byte b in encryptBytes)
{
str = str + ("{0:x2}", b);
}
return str;
}
//解密算法
public string RSADecrypt(string decryptString)
{
CspParameters csp = new CspParameters();
tainerName = "whaben";
RSACryptoServiceProvider RSAProvider = new RSACryptoServiceProvider(csp);
int length = ( / 2);
byte[] decryptBytes = new byte[length];
for (int index = 0; index < length; index++)
{
string substring = ing(index * 2, 2);
decryptBytes[index] = (substring, 16);
}
decryptBytes = t(decryptBytes, true);
return ing(decryptBytes);
}
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690462919a352870.html
评论列表(0条)