欢迎访问宙启技术站
智能推送

在ASP.NET中如何实现DES加密与解密MD5加密功能

发布时间:2023-05-17 11:43:16

在ASP.NET中,可以使用System.Security.Cryptography命名空间下的对称加密算法和哈希算法来实现DES加密和MD5加密功能。

DES加密:

对称加密算法中的DES算法采用相同的密钥进行加密解密操作,因此需要先生成一个密钥。可以使用以下代码生成一个8个字节的密钥:

byte[] key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };

然后可以使用DESCryptoServiceProvider类来实现DES算法的加密解密操作。以下是一个示例代码:

using System.Security.Cryptography;
using System.IO;

public static string EncryptDES(string plainText, byte[] key)
{
    byte[] iv = key; //初始化向量可以采用密钥的方式传入,也可以使用固定的值

    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);
    MemoryStream ms = new MemoryStream();

    CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);
    cs.Write(inputByteArray, 0, inputByteArray.Length);
    cs.FlushFinalBlock();

    StringBuilder sb = new StringBuilder();
    foreach (byte b in ms.ToArray())
    {
        sb.AppendFormat("{0:X2}", b);
    }
    return sb.ToString();
}

public static string DecryptDES(string cipherText, byte[] key)
{
    byte[] iv = key; //初始化向量可以采用密钥的方式传入,也可以使用固定的值

    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    byte[] inputByteArray = new byte[cipherText.Length / 2];
    for (int x = 0; x < cipherText.Length / 2; x++)
    {
        int i = (Convert.ToInt32(cipherText.Substring(x * 2, 2), 16));
        inputByteArray[x] = (byte)i;
    }

    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Write);
    cs.Write(inputByteArray, 0, inputByteArray.Length);
    cs.FlushFinalBlock();

    return Encoding.UTF8.GetString(ms.ToArray());
}

以上代码中,EncryptDES函数使用DES算法加密一个字符串,返回一个经过十六进制编码的密文。DecryptDES函数使用同样的密钥解密密文,返回原始文本。

MD5加密:

哈希算法中的MD5算法可以将任意长度的消息转换成一个128位的消息摘要。可以使用以下代码实现MD5加密:

using System.Security.Cryptography;

public static string EncryptMD5(string plainText)
{
    MD5 md5 = MD5.Create();
    byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);
    byte[] hashByteArray = md5.ComputeHash(inputByteArray);

    StringBuilder sb = new StringBuilder();
    foreach (byte b in hashByteArray)
    {
        sb.AppendFormat("{0:x2}", b);
    }
    return sb.ToString();
}

以上代码中,EncryptMD5函数将一个字符串进行MD5加密,返回一个32位的十六进制字符串。