/// <summary>
/// DES(56位)
/// DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。
/// 其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
/// </summary>
public class DES
{
#region 公用des
/// <summary>
/// 改变密钥向量
/// </summary>
public void ChangeKeys()
{
Keys = PuKeys;
}
/// <summary>
/// 改变密钥向量
/// </summary>
/// <param name="keys">自定义向量</param>
public void ChangeKeys(byte[] keys)
{
if (keys.Length != 8)
{
throw new Exception("必须是8 为的 byte");
}
Keys = keys;
}
//默认密钥向量
static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/// <summary>
/// 自定义公共
/// </summary>
public static byte[] PuKeys = { 0x15, 0x1, 0x0, 0x78, 0x91, 0xAD, 0x1D, 0xCF };
/// <summary>
/// 默认密钥
/// </summary>
static string okey = "CMDKDCJC";
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
public static string EncryptDES(string encryptString)
{
return EncryptDES(encryptString, okey);
}
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString, string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,
rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptString;
}
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptString)
{
return DecryptDES(decryptString, okey);
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptString, string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey,
rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return decryptString;
}
}
#endregion
#region
/// <summary>
/// des解密方式
/// </summary>
/// <param name="mq">密文</param>
/// <param name="Key">密钥</param>
/// <param name="Vector"></param>
/// <returns></returns>
public static Byte[] Decrypt(String mq, String Key, String Vector)
{
Byte[] Data = Convert.FromBase64String(mq);
Byte[] bKey = new Byte[8];
bKey[0] = 82;
bKey[1] = 82;
bKey[2] = 79;
bKey[3] = 70;
bKey[4] = 79;
bKey[5] = 84;
bKey[6] = 79;
bKey[7] = 69;
Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
Byte[] bVector = new Byte[8];
bVector = bKey;
Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
Byte[] original = null;
DESCryptoServiceProvider CryptoProvider = new DESCryptoServiceProvider();
CryptoProvider.Mode = CipherMode.ECB;
//CryptoProvider.Padding = PaddingMode.Zeros;
try
{
// 开辟一块内存流,存储密文
using (MemoryStream Memory = new MemoryStream(Data))
{
// 把内存流对象包装成加密流对象
using (CryptoStream Decryptor = new CryptoStream(Memory,
CryptoProvider.CreateDecryptor(bKey, bVector),
CryptoStreamMode.Read))
{
// 明文存储区
using (MemoryStream originalMemory = new MemoryStream())
{
Byte[] Buffer = new Byte[1024];
Int32 readBytes = 0;
while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
{
originalMemory.Write(Buffer, 0, readBytes);
}
original = originalMemory.ToArray();
}
}
}
}
catch(Exception e)
{
original = null;
}
return original;
}
/// <summary>
/// DES加密方法
/// </summary>
/// <param name="strPlain">明文</param>
/// <param name="strDESKey">密钥</param>
/// <param name="strDESIV">向量</param>
/// <returns>密文</returns>
public static string DESEncrypt(string strPlain, string strDESKey, string strDESIV)
{
Byte[] bytesDESKey = new Byte[8];
bytesDESKey[0] = 82;
bytesDESKey[1] = 82;
bytesDESKey[2] = 79;
bytesDESKey[3] = 70;
bytesDESKey[4] = 79;
bytesDESKey[5] = 84;
bytesDESKey[6] = 79;
bytesDESKey[7] = 69;
Array.Copy(Encoding.UTF8.GetBytes(strDESKey.PadRight(bytesDESKey.Length)), bytesDESKey, bytesDESKey.Length);
Byte[] bytesDESIV = new Byte[8];
bytesDESIV = bytesDESKey;
Array.Copy(Encoding.UTF8.GetBytes(strDESIV.PadRight(bytesDESIV.Length)), bytesDESIV, bytesDESIV.Length);
//声明1个新的DES对象
DESCryptoServiceProvider desEncrypt = new DESCryptoServiceProvider();
desEncrypt.Mode = CipherMode.ECB;
//desEncrypt.Padding = PaddingMode.Zeros;
//开辟一块内存流
MemoryStream msEncrypt = new MemoryStream();
//把内存流对象包装成加密流对象
CryptoStream csEncrypt = new CryptoStream(msEncrypt, desEncrypt.CreateEncryptor(bytesDESKey, bytesDESIV), CryptoStreamMode.Write);
byte[] inputByteArray = Encoding.UTF8.GetBytes(strPlain);
csEncrypt.Write(inputByteArray, 0, inputByteArray.Length);
csEncrypt.FlushFinalBlock();
return Convert.ToBase64String(msEncrypt.ToArray());
}
#endregion
#region MD5
/// <summary>
/// MD5函数
/// </summary>
/// <param name="str">原始字符串</param>
/// <returns>MD5结果</returns>
public static string MD5(string str)
{
if (string.IsNullOrEmpty(str))
return "";
byte[] b = Encoding.Default.GetBytes(str);
b = new MD5CryptoServiceProvider().ComputeHash(b);
StringBuilder ret = new StringBuilder();
for (int i = 0; i < b.Length; i++)
ret.Append(b[i].ToString("x").PadLeft(2, '0'));
return ret.ToString();
}
public static string GMD5(string message)
{
Byte[] clearBytes = new UnicodeEncoding().GetBytes(message);
Byte[] hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);
String tt = BitConverter.ToString(hashedBytes).Replace("-", "");
// MessageBox.Show(tt.Length.ToString());
return tt;
}
public static string ToGB2312(string str)
{
string r = "";
System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(str, @"\\u([\w]{2})([\w]{2})", System.Text.RegularExpressions.RegexOptions.Compiled | System.Text.RegularExpressions.RegexOptions.IgnoreCase);
byte[] bts = new byte[2];
foreach (System.Text.RegularExpressions.Match m in mc)
{
bts[0] = (byte)int.Parse(m.Groups[2].Value, System.Globalization.NumberStyles.HexNumber);
bts[1] = (byte)int.Parse(m.Groups[1].Value, System.Globalization.NumberStyles.HexNumber);
r += Encoding.Unicode.GetString(bts);
}
return r;
}
分享到:
相关推荐
本文将详细解释如何在ASP.NET中使用C#实现DES加密和解密。 1. **DES加密算法**: DES是一种分组密码,它使用64位的明文块和64位的密钥进行操作。在实际应用中,由于DES的安全性相对较低,通常会使用3DES(Triple ...
ASP.NET的MD5和DES加密和解密算法 非常好的资源 欢迎大家参考
这些类提供了强大的加密算法,例如3DES、AES和RSA,它们都是广泛认可的对称和非对称加密算法。 3. **对称加密**:如3DES和AES,使用相同的密钥进行加密和解密。优点是速度快,适合大量数据的加密。在ASP.NET中,...
6. DESCryptoServiceProvider:是.NET Framework中对DES加密算法的实现。 在ASP.NET中,`System.Security.Cryptography`命名空间是处理所有加密操作的核心,提供了丰富的类库和方法。此外,`System.Web.Security`...
提供Asp.net 2.0文件和字符串的DES算法加密解密. 在项目的Bin文件夹里引用这个文件就可以了,或者直接考到Bin目录里。。专门给初学者用的呵呵。。
包含3Des,TripledDES,md5等加密字符串
1. **加密算法**:在ASP.NET中,常见的加密算法有对称加密(如AES、DES、3DES)和非对称加密(如RSA)。对称加密速度快,适合大量数据加密;非对称加密安全性高,但速度较慢,常用于密钥交换。源代码可能涉及到这些...
常见的对称加密算法有DES、3DES、AES等。例如,使用AES(高级加密标准)时,可以使用`System.Security.Cryptography.Aes`类。以下是一个简单的AES加密解密示例: ```csharp using System; using System.IO; using ...
ASP.NET中常用的对称加密算法有AES(高级加密标准)和DES(数据加密标准)。使用`System.Security.Cryptography`命名空间中的类,如`Aes`或` DESCryptoServiceProvider`,可以轻松实现对称加密。 2. 非对称加密:非...
`DESCryptoServiceProvider`是.NET Framework提供的一种对称加密算法,它基于DES(Data Encryption Standard)标准,用于实现快速、安全的数据加密。 一、DES加密算法基础 DES是一种古老的加密算法,它使用64位的...
在.NET中,常用的加密算法包括对称加密(如:AES、DES、3DES)和非对称加密(如:RSA、DSA)。对称加密使用相同的密钥进行加密和解密,速度快,适合大量数据的加密;非对称加密则使用一对公钥和私钥,安全性更高,但...
总结来说,ASP.NET Core提供了丰富的加密和解密工具,包括对称加密(如DES、3DES和AES)、非对称加密(如RSA和ECC)、哈希函数(如MD5)以及认证码(如HMAC)。选择哪种加密算法取决于应用场景、安全需求和性能考虑...
总结来说,Asp.NET 提供了强大的加密和解密工具,涵盖了从基本的DES到现代的AES,以及非对称加密和散列算法。开发者可以通过 .NET Framework 中的 `System.Security.Cryptography` 命名空间轻松集成这些功能,确保...
ASP.NET提供了丰富的加密解密功能,支持多种加密算法。开发人员可以根据需求选择合适的加密技术,结合内置的类库或使用专门的工具进行操作。同时,良好的密钥管理策略也是确保数据安全的关键。对于测试目的,可以...
除了基本的MD5加密,ASP.NET还提供了多种加密和解密方式,例如SHA系列、AES、DES等。这些算法各有特点,适用于不同的安全需求。例如,如果需要更高级的安全性,可以考虑使用RSA或AES等对称/非对称加密算法。 在实际...
对称加密算法,如DES、TripleDES和Rijndael,使用同一密钥进行加密和解密,适合本地数据的快速加密,因为它们的计算效率较高。Rijndael,也被称为AES(高级加密标准),是目前广泛使用的对称加密算法,具有较高的...
- 3DES(三重数据加密算法):对DES算法的改进,通过使用三个不同的密钥对数据进行三次加密,提高了安全性。 - RC2和RC4:这两种算法适用于快速加密大量数据,RC4通常用于网络通信,而RC2在某些软件中用于替代DES。 ...
.NET加密技术是软件开发中确保数据安全的重要环节,它涵盖了多种加密算法和方法,用于保护敏感信息不被未经授权的人员访问。对称加密技术是一种常见的加密手段,它以其高效和简单的特点,在.NET框架中得到了广泛应用...
在ASP.NET中,我们可以使用`System.Security.Cryptography`命名空间中的`DESCryptoServiceProvider`类来实现DES加密和解密。 #### 加密过程: 1. 创建`DESCryptoServiceProvider`实例。 2. 使用`CreateEncryptor`...
1. **System.Security.Cryptography** 命名空间:ASP.NET提供了丰富的加密类库,如AES(高级加密标准)、DES(数据加密标准)、RSA(公钥加密算法)等。其中,AES是最常用的对称加密算法,适用于字符串加密。 2. **...