文章摘要: 一、数据加密概念 1 .基本概念 2 .基本功能 3 .加密格式 二、数据加密的项目应用与学习 1、媒体加密: DRM 2 .文件加密:文本加密、pdf、word 3、数据加密:在ASP.NET(C#井)中进行数据加密 4、硬件加密:加密狗 三、数据加密的发展趋势 四、网络数据加密算法的分类 1、完全不考虑解密问题: MD5、 2 .私钥加密: DES、AES 3 .
一、数据加密概念
1 .基本概念
2 .基本功能
3 .加密格式
二、数据加密的项目应用与学习
1、媒体加密: DRM
2 .文件加密:文本加密、pdf、word
3、数据加密:在ASP.NET(C#井)中进行数据加密
4、硬件加密:加密狗
三、数据加密的发展趋势
四、网络数据加密算法的分类
1、完全不考虑解密问题: MD5、
2 .私钥加密: DES、AES
3 .公用密钥加密: RSA
4、数字证书
五、对称加密的DES加密和解密讲义
六、讲授非对称加密的RSA加密和解密
七、ASP.NET(C#井)中常用加密类实例调用的讲义
ASP.NET(C#井)中常用的数据加密和解密方法摘要
数据加密技术是网络中最基本的安全性技术,主要是通过对经由网络发送的信息进行数据加密来确保安全性的前瞻性安全措施,其可以以极少的成本为信息提供极大的安全保护。
一、加密的基本概念
“加密”是限制访问网络上的传输数据的技术。 原始数据(也称为明文,plaintext )与被加密的设备(硬件或软件)用密钥加密而生成的加密数据称为密文( ciphertext )。 将密文恢复为原始明文的过程称为解密,这是加密的逆过程,但是解密者需要使用相同类型的加密设备和密钥来解密该密文。
加密的基本功能是:
1 .防止不愉快的客人看到机密的数据文件
2 .防止机密数据的泄露和篡改
3 .防止特权用户(如系统管理员)查看个人数据文件
4 .防止入侵者轻易找到系统文件。
数据加密是确保计算机网络安全的重要机制,由于成本、技术和管理复杂性等原因,目前尚未普及到网络中,但数据加密确实是分布式系统和网络环境下实现数据安全的重要手段之一。
数据加密可用于网络OSI第7层协议( OSI是Open System Interconnect的缩写,表示开放系统互连)。 国际标准组织(国际标准化组织)制定了OSI模式。 该模型将网络通信功能分为7层:物理层、数据链路层、网络层、传输层、会话层、呈现层和应用层。 )的多层实现,从加密技术的应用的逻辑位置来看,有三种方案:
①链路加密:通常将网络层以下的密码称为链路加密,主要保护在通信节点之间传送的数据,对密码进行解密,由设置在线路上的密码装置实现。 根据传递的数据同步方式,分为同步通信加密和异步通信加密,同步通信加密包括字节同步通信加密和位同步通信加密。
②节点加密:链路加密的改进。 在协议传输层进行加密主要是通过对源节点和目标节点之间的传输数据进行加密和保护,与链路加密类似。 加密算法仅耦合到连接到节点的加密模块,就克服了链路加密容易被节点非法访问的缺点。
③端到端加密:网络层以上的加密称为端到端加密。 适用于网络层主体。 应用层的数据信息的加密可以以软件来容易地实现和以低成本在密钥管理方面遇到困难并且主要适用于在大型网络系统中在多个始发者和接收者之间传输信息。
二、数据加密的应用
1、媒体加密: DRM
2 .文件加密:文本加密、pdf、word
3、数据加密:在ASP.NET(C#井)中进行数据加密
4、硬件加密:加密狗
三、加密技术的发展趋势
①私钥加密技术和公钥加密技术相结合的:考虑到两种加密方式的加密特征,可以在实际应用中采用妥协方案。 将DES/IDEA和RSA组合起来,将DES设为“内核”,将RSA设为“shell”,在网络中传输的数据可以在DES或IDEA中加密,加密用的密钥可以在RSA中加密后传输。 该方法保证了数据的安全性,提高了加密和解密的速度,这也是当前加密技术发展的新方向之一。
②寻求新算法:脱离基于常见迭代的结构思路,脱离基于数学问题复杂度的结构方法。 如刘尊全提出的刘氏算法,采用基于密钥的公钥方式,采用随机原理结构加以解密变换,将其全部运算控制隐藏在密钥中,密钥长度可变。 选择一定长度的分割构建大搜索空间,实现非线性变换。 该加密算法加密强度高,速度快,计算开销低。
③加密最终与系统和网络相集成。 例如,IPV6协议已经支持内置加密,英特尔在硬件方面开发了加密协议。 能够集成在微机的主极上。
四、密码技术的分类
加密类型可以简单地分为四种类型:
1 .完全不考虑解密问题
2 .私钥加密技术:对称加密( Symmetric Key Encryption ) :对称加密方法使用相同的密钥进行加密和解密。 通常,该加密方式难以以相同的安全方式共享密钥,所以在应用中难以实现。 包括RC4、RC2、DES和AES系列加密算法。
3 .公钥加密技术:不对称密钥加密:不对称密钥加密使用一组公共/私钥系统,在加密中使用一个密钥,而在解密中使用另一个密钥。 公钥可以广泛共享和公开。 如果需要将数据加密并传输到服务器外部,则此加密方法非常有用。 例如RSA
4 .数字证书。 ( Certificate ) :数字证书是非对称密钥加密,但是组织可以使用证书通过数字签名将一组公钥和私钥与所有者相关联。
五、对称加密的DES加密和解密
一、对称加密
对称加密是在加密运算、解密运算中使用相同密钥的传统的加密方式,信息的始发者和信息的接收者在进行信息的传送和处理时必须共享该加密(称为对称加密)。 因此,通信双方必须得到该密钥并保持密钥秘密。
单密钥加密系统的安全性取决于以下两个因素:
第一,加密算法必须足够强,仅基于密文本身解密信息在实践中是不可能的。
其次,加密方法的安全性取决于密钥机密性,而不是算法的机密性,因此无需确保算法的机密性(实际公开了许多实际使用的单密钥加密系统的算法),但是我们还必须确保密钥机密性。
des (数据加密标准)和TripleDES是对称加密的两种实现。
DES和TripleDES的基本算法是一致的,但TripleDES算法所提供的key比特数多,加密的可靠性高。
在DES中使用的密钥key是8字节,初始向量IV也是8字节。
TripleDES使用24字节的key,初始向量IV也是8字节。
两种算法都将8字节加密为1块,1块是1块的加密,1字节的明文加密的密文也是8字节。 如果明文长度不是8字节的整数倍,则将值为0的字节与8字节的整数倍相加。 加密密文的长度必须是8字节的整数倍。
二、密码解读过程
Figure 1. DES加密解密过程
DES和TripleDES算法的整体加密解密过程,接着以TripleDES为例结合dotnet来分析加密解密的各个步骤,并提供相关的实现代码。
请注意,如果DES加密是以块为单位加密的,并且是8字节1块,并且要加密的明度byte[]的长度不是8字节的整数倍,则算法会先用值为“0”的byte补充8字节,然后再进行加密。 加密的密文长度必须是8的整数倍。 如果在这样的密文的解密后补充0值的byte,则在解密后这些0值的byte依然存在。 例如,在上例中加密的明文如下:
"这里是要加密的数据. "
转换为明文byte[]时变为66字节,DES算法将0值byte补充为6字节、72字节。 这样加密解密的密文byte[]解密的字符串如下所示
“这里是要加密的数据。 \0\0\0\0\0'
5、从编码字节变成流字符串的明文
//使用以前定义的Encoding,在utf-8编码中将byte[]转换为字符串
plaintext string=encoding.getstring ( finalplaintextarray )
6、非对称加密的RSA加密和解密说明RSA公钥加密算法是Ron Rivest、Adi Shamirh和LenAdleman于1977年开发的。 RSA的名字来源于开发人员的三个名字。 RSA是目前最具影响力的公钥加密算法,能够抵抗所有已知的密码攻击。 作为公钥数据加密标准被ISO推荐。 RSA算法是基于非常简单的数学事实的:虽然很容易将两个大素数相乘,但是因为在那时很难对乘积进行因式分解,所以可以将乘积公布为加密密钥。 RSA算法是第一种可用于加密和数字签名的算法,易于理解和使用。
RSA是研究最广泛的公钥算法,从提交到现在的二十年,经历了各种攻击的考验,逐渐被人们所接受,被认为是目前最好的公钥方案之一。 RSA的安全性依赖于数据因子分解,但理论上没有证明破译RSA的难度等同于数据分解的难度。 也就是说,RSA的重大缺陷是其保密性能无法理论把握,密码学界的大多数人都倾向于因子分解不是NPC问题。
RSA的缺点主要包括:
a )生成密钥很麻烦,并且受素数生成技术的限制,因此一次难以保密。
b )为了确保分组长度过大、安全性,随着大容量分解技术的发展,至少n为600比特或更高,运算成本高,尤其是速率慢,比对称加密算法慢几位,这是可能的。
长度增加,不利于数据格式的标准化。 当前,set (安全电子传输)协议要求CA使用长度为2048比特的密钥,而其它实体使用长度为1024比特的密钥。 C)RSA密钥的长度随密度的增加而迅速增加。 下表列出了相同安全级别的密钥长度。
C#代码实现
需引用using System.Security.Cryptography;
复制代码
/// <summary>
/// RSA加密
/// </summary>
/// <param name="publickey"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string RSAEncrypt(string publickey, string content)
{
publickey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(publickey);
cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
return Convert.ToBase64String(cipherbytes);
}
/// <summary>
/// RSA解密
/// </summary>
/// <param name="privatekey"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string RSADecrypt(string privatekey, string content)
{
privatekey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent><P>/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw==</P><Q>6Cn/jOLrPapDTEp1Fkq+uz++1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow==</Q><DP>ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw==</DP><DQ>MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw==</DQ><InverseQ>EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg==</InverseQ><D>vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=</D></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(privatekey);
cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);
return Encoding.UTF8.GetString(cipherbytes);
}
复制代码
七、ASP.NET(C#)常用加密类调用的讲解
1、C#常用加密解密类库代码如下:
复制代码
/// <summary>
/// MD5 加密静态方法
/// </summary>
/// <param name="EncryptString">待加密的密文</param>
/// <returns>returns</returns>
public static string MD5Encrypt(string EncryptString)
{
if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得为空")); }
MD5 m_ClassMD5 = new MD5CryptoServiceProvider();
string m_strEncrypt = "";
try
{
m_strEncrypt = BitConverter.ToString(m_ClassMD5.ComputeHash(Encoding.Default.GetBytes(EncryptString))).Replace("-", "");
}
catch (ArgumentException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_ClassMD5.Clear(); }
return m_strEncrypt;
}
/// <summary>
/// DES 加密(数据加密标准,速度较快,适用于加密大量数据的场合)
/// </summary>
/// <param name="EncryptString">待加密的密文</param>
/// <param name="EncryptKey">加密的密钥</param>
/// <returns>returns</returns>
public static string DESEncrypt(string EncryptString, string EncryptKey)
{
if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得为空")); }
if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密钥不得为空")); }
if (EncryptKey.Length != 8) { throw (new Exception("密钥必须为8位")); }
byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
string m_strEncrypt = "";
DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();
try
{
byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);
m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);
m_cstream.FlushFinalBlock();
m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_cstream.Close(); m_cstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_DESProvider.Clear(); }
return m_strEncrypt;
}
/// <summary>
/// DES 解密(数据加密标准,速度较快,适用于加密大量数据的场合)
/// </summary>
/// <param name="DecryptString">待解密的密文</param>
/// <param name="DecryptKey">解密的密钥</param>
/// <returns>returns</returns>
public static string DESDecrypt(string DecryptString, string DecryptKey)
{
if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得为空")); }
if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); }
if (DecryptKey.Length != 8) { throw (new Exception("密钥必须为8位")); }
byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
string m_strDecrypt = "";
DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();
try
{
byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);
m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);
m_cstream.FlushFinalBlock();
m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_cstream.Close(); m_cstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_DESProvider.Clear(); }
return m_strDecrypt;
}
/// <summary>
/// RC2 加密(用变长密钥对大量数据进行加密)
/// </summary>
/// <param name="EncryptString">待加密密文</param>
/// <param name="EncryptKey">加密密钥</param>
/// <returns>returns</returns>
public static string RC2Encrypt(string EncryptString, string EncryptKey)
{
if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得为空")); }
if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密钥不得为空")); }
if (EncryptKey.Length < 5 || EncryptKey.Length > 16) { throw (new Exception("密钥必须为5-16位")); }
string m_strEncrypt = "";
byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();
try
{
byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);
m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);
m_cstream.FlushFinalBlock();
m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_cstream.Close(); m_cstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_RC2Provider.Clear(); }
return m_strEncrypt;
}
/// <summary>
/// RC2 解密(用变长密钥对大量数据进行加密)
/// </summary>
/// <param name="DecryptString">待解密密文</param>
/// <param name="DecryptKey">解密密钥</param>
/// <returns>returns</returns>
public static string RC2Decrypt(string DecryptString, string DecryptKey)
{
if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得为空")); }
if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); }
if (DecryptKey.Length < 5 || DecryptKey.Length > 16) { throw (new Exception("密钥必须为5-16位")); }
byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
string m_strDecrypt = "";
RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();
try
{
byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);
m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);
m_cstream.FlushFinalBlock();
m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_cstream.Close(); m_cstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_RC2Provider.Clear(); }
return m_strDecrypt;
}
/// <summary>
/// 3DES 加密(基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高)
/// </summary>
/// <param name="EncryptString">待加密密文</param>
/// <param name="EncryptKey1">密钥一</param>
/// <param name="EncryptKey2">密钥二</param>
/// <param name="EncryptKey3">密钥三</param>
/// <returns>returns</returns>
public static string DES3Encrypt(string EncryptString, string EncryptKey1, string EncryptKey2, string EncryptKey3)
{
string m_strEncrypt = "";
try
{
m_strEncrypt = DESEncrypt(EncryptString, EncryptKey3);
m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey2);
m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey1);
}
catch (Exception ex) { throw ex; }
return m_strEncrypt;
}
/// <summary>
/// 3DES 解密(基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高)
/// </summary>
/// <param name="DecryptString">待解密密文</param>
/// <param name="DecryptKey1">密钥一</param>
/// <param name="DecryptKey2">密钥二</param>
/// <param name="DecryptKey3">密钥三</param>
/// <returns>returns</returns>
public static string DES3Decrypt(string DecryptString, string DecryptKey1, string DecryptKey2, string DecryptKey3)
{
string m_strDecrypt = "";
try
{
m_strDecrypt = DESDecrypt(DecryptString, DecryptKey1);
m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey2);
m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey3);
}
catch (Exception ex) { throw ex; }
return m_strDecrypt;
}
/// <summary>
/// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)
/// </summary>
/// <param name="EncryptString">待加密密文</param>
/// <param name="EncryptKey">加密密钥</param>
/// <returns></returns>
public static string AESEncrypt(string EncryptString, string EncryptKey)
{
if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得为空")); }
if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密钥不得为空")); }
string m_strEncrypt = "";
byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");
Rijndael m_AESProvider = Rijndael.Create();
try
{
byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_csstream = new CryptoStream(m_stream, m_AESProvider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);
m_csstream.Write(m_btEncryptString, 0, m_btEncryptString.Length); m_csstream.FlushFinalBlock();
m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_csstream.Close(); m_csstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_AESProvider.Clear(); }
return m_strEncrypt;
}
/// <summary>
/// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)
/// </summary>
/// <param name="DecryptString">待解密密文</param>
/// <param name="DecryptKey">解密密钥</param>
/// <returns></returns>
public static string AESDecrypt(string DecryptString, string DecryptKey)
{
if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得为空")); }
if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); }
string m_strDecrypt = "";
byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");
Rijndael m_AESProvider = Rijndael.Create();
try
{
byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_csstream = new CryptoStream(m_stream, m_AESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);
m_csstream.Write(m_btDecryptString, 0, m_btDecryptString.Length); m_csstream.FlushFinalBlock();
m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_csstream.Close(); m_csstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_AESProvider.Clear(); }
return m_strDecrypt;
}
复制代码
2、数据加密和解密简单代码调用如下:
Response.Write("<br>-----------MD5加密---------------<br>");
Response.Write(SDKSecurity.MD5Encrypt("仰天一笑"));
Response.Write("<br>-----------DES加密---------------<br>");
Response.Write(SDKSecurity.DESEncrypt("仰天一笑", "anson-xu"));
Response.Write("<br>-----------DES解密---------------<br>");
Response.Write(SDKSecurity.DESDecrypt("l06JvJ45r/lb9iKzSXl47Q==", "anson-xu"));
Response.Write("<br>-----------AES加密---------------<br>");
Response.Write(SDKSecurity.AESEncrypt("仰天一笑", "ansonxuyu"));
Response.Write("<br>-----------AES解密---------------<br>");
Response.Write(SDKSecurity.AESDecrypt("avwKL+MO8+zoLHvzk0+TBA==", "ansonxuyu"));
3、数据加密和解密调用后运行效果图如下: