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";   //向量

/// <summary>
/// 加密
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
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;
}

/// <summary>
/// 解密
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
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();
}

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值