对称加密的例子(DES)——直接加密和解密字符串

这是在课堂上讲解的一个例子,最简单的对称算法,DES
关于该算法的一些说明,有兴趣的朋友可以参考下面的链接
http://baike.baidu.com/view/7510.htm
 
 
    static void Main(string[] args)
    {
        DES des = DES.Create();
        des.Key = Convert.FromBase64String("12345678910=");
        des.IV = Convert.FromBase64String("12345678910=");
        //DES的算法密钥和向量必须是12位,而且最后一位必须的=
        //而且必须用FromBase64String的方式获取

        string original = "Hello,world";
        byte[] data = EncryptText(original, des.Key, des.IV);//加密
        string result = DecryptText(data, des.Key, des.IV);//解密

        Console.WriteLine(result);
        Console.Read();


    }

    private static string DecryptText(byte[] data, byte[] key, byte[] iv)
    {
        MemoryStream ms = new MemoryStream(data);
        DES des = DES.Create();
        CryptoStream stream = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read);
        byte[] from = new byte[data.Length];
        stream.Read(from, 0, from.Length);

        return Encoding.ASCII.GetString(from);

    }

    private static byte[] EncryptText(string original, byte[] key, byte[] iv)
    {
        MemoryStream ms = new MemoryStream();//用来接收密文的内存流
        DES des = DES.Create();
        CryptoStream stream = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);
        //创建加密流

        byte[] to = Encoding.ASCII.GetBytes(original);//获取输入的字符串的字节
        stream.Write(to, 0, to.Length);//写入加密流
        stream.FlushFinalBlock();//写入内存流,并清空缓冲区
        byte[] ret = ms.ToArray();
        stream.Close();
        ms.Close();

        return ret;

    }
原文地址:https://www.cnblogs.com/chenxizhang/p/1691876.html