C#中的DES加密解密

C#中加密和解密的算法
  System.Security.Cryptography名字空间包含了实现安全方案的类,例如加密和解密数据、管理密钥、验证数据的完整性并确保数据没有被篡改等等。
  加密和解密的算法分为对称(symmetric)算法和不对称(asymmetric)算法。对称算法在加密和解密数据时使用相同的密钥和初始化矢量,典型的有DES、 TripleDES和Rijndael算法,它适用于不需要传递密钥的情况,主要用于本地文档或数据的加密。不对称算法有两个不同的密钥,分别是公共密钥和私有密钥,公共密钥在网络中传递,用于加密数据,而私有密钥用于解密数据。不对称算法主要有RSA、DSA等,主要用于网络数据的加密。

加密和解密本地文档

下面的例子是C#中加密和解密本地文本,使用的是DES对称算法。

1、引用文件

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

2、编写DES加密/解密方法

public static string _KEY = "HQDCKEY1";  //密钥
public static string _IV = "HQDCKEY2";   //向量

/// 
/// 加密
/// 
/// 
/// 
public static string Encode(string data)
{

    byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(_KEY);
    byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(_IV);

    DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
    int i = cryptoProvider.KeySize;
    MemoryStream ms = new MemoryStream();
    CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);

    StreamWriter sw = new StreamWriter(cst);
    sw.Write(data);
    sw.Flush();
    cst.FlushFinalBlock();
    sw.Flush();

    string strRet = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
    return strRet;
}

/// 
/// 解密
/// 
/// 
/// 
public static string Decode(string data)
{

    byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(_KEY);
    byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(_IV);

    byte[] byEnc;

    try
    {
        data.Replace("_%_", "/");
        data.Replace("-%-", "#");
        byEnc = Convert.FromBase64String(data);

    }
    catch
    {
        return null;
    }

    DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
    MemoryStream ms = new MemoryStream(byEnc);
    CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
    StreamReader sr = new StreamReader(cst);
    return sr.ReadToEnd();
}

3、运行测试

static void Main(string[] args)
{
    string data = "http://blog.csdn.net/pan_junbiao/";  //要加密的数据
    string encodeStr = "";   //加密后文本
    string decodeStr = "";   //解密后文本

    Console.WriteLine("原文本:{0}", data);
    encodeStr = Encode(data);
    Console.WriteLine("加密后文本:{0}", encodeStr);
    decodeStr = Decode(encodeStr);
    Console.WriteLine("解密后文本:{0}", decodeStr);
    Console.Read();
}

运行结果:

你可能感兴趣的:(我の原创,C#/.NET编程)