.Net下的加密解密大全(5):玩转对称加密

来源:互联网 发布:linux中echo 编辑:程序博客网 时间:2024/05/18 18:14

    上篇博文介绍了怎么玩转Hash算法,不过那篇文章没有交代清楚。这篇博文我将力争将那些没交代清楚的东东都说明白了。当然本文的主题是玩转对称加密。

    .NET下的对称加密技术主要有这么几种:DES,AES,Rijndael,TripleDES(3DES)。现在就来玩转它们吧!与上篇博文一样,首先创建一个接口:“IEncryptAndDecrypt”,然后为DES,AES,Rijnael,TripleDES(3DES)建立对应的类并实现接口“IEncryptAndDecrypt”。它们的结果如下图:


    这样我们在后期的编程中只需要简单的调用接口IEncryptAndDecrypt中的方法“Encrypt”和“Decrypt”就可以对数据进行加密解密啦。当然要实现这样的愿望我们还得继续努力,当前我的目标就是为它们找一个合格的lead,这样我们如果要找DES干活就可以直接对lead说,而不用满世界的去找咱们的DES。来瞧瞧咱们的Lead吧:


咱们来瞧瞧这个Lead的能耐吧,看看它是否能胜任它的工作:

            EncryptAndDecryptInvoker leader;// = new EncryptAndDecryptInvoker(null, null);                                    //执行环境            CryptogramSetting setting = new CryptogramSetting() { };            string data="快去干活";            byte[] bData;//加密处理前            byte[] aData;//机密处理后            byte[] tmp;            Encoding encoding=System.Text.Encoding.UTF8;            //叫DES干活            IEncrytAndDecrypt myDES = new DES();            setting.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };            setting.Key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };            setting.CryptogramType = CryptogramType.SymmetryEncryptAndDecrypt;            //给lead发送要求            leader = new EncryptAndDecryptInvoker(myDES, setting);                       Console.WriteLine("DES:");            tmp=leader.Encrypt(encoding.GetBytes(data));            Console.WriteLine("加密:"+Convert.ToBase64String(tmp));            tmp = leader.Decrypt(tmp);            Console.WriteLine("解密:" + encoding.GetString(tmp));            //叫AES干活            IEncrytAndDecrypt myAES = new AES();            setting.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8,9,10,11,12,13,14,15,16 };            setting.Key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 ,9,10,11,12,13,14,15,16};            setting.CryptogramType = CryptogramType.SymmetryEncryptAndDecrypt;            //给lead发送要求            leader = new EncryptAndDecryptInvoker(myAES, setting);            Console.WriteLine("AES:");            tmp = leader.Encrypt(encoding.GetBytes(data));            Console.WriteLine("加密:" + Convert.ToBase64String(tmp));            tmp = leader.Decrypt(tmp);            Console.WriteLine("解密:" + encoding.GetString(tmp));                                                                                                            //叫Rijndael干活            IEncrytAndDecrypt myRijndael = new Rijndael();            setting.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };            setting.Key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };            setting.CryptogramType = CryptogramType.SymmetryEncryptAndDecrypt;            //给lead发送要求            leader = new EncryptAndDecryptInvoker(myRijndael, setting);            Console.WriteLine("Rijndael:");            tmp = leader.Encrypt(encoding.GetBytes(data));            Console.WriteLine("加密:" + Convert.ToBase64String(tmp));            tmp = leader.Decrypt(tmp);            Console.WriteLine("解密:" + encoding.GetString(tmp));            //叫3DES干活            IEncrytAndDecrypt my3DES = new TripleDES();            setting.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };            setting.Key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };            setting.CryptogramType = CryptogramType.SymmetryEncryptAndDecrypt;            //给lead发送要求            leader = new EncryptAndDecryptInvoker(my3DES, setting);            Console.WriteLine("3DES:");            tmp = leader.Encrypt(encoding.GetBytes(data));            Console.WriteLine("加密:" + Convert.ToBase64String(tmp));            tmp = leader.Decrypt(tmp);            Console.WriteLine("解密:" + encoding.GetString(tmp));            Console.ReadKey();

执行结果:

   

    看来我们的lead还是很给力的嘛,完全胜任了它的操作。

    

原创粉丝点击