.Net下的加密解密大全(4):玩转Hash加密

    在本系列文章的第一部分里,我们感性的认识了.Net下的几种常用的Hash加密。虽然这些功能强大的代码碎片能解决你目前碰到的hash任务,但却不利于后期维护。好吧,我们就把他们糅合到一起吧,是时候给他们打扮下啦。

    文章第部分提到的哈希算法有:MD5,SHA1,SHA256,SHA384,SHA512。5种算法,但功能都一致:就是把输入的数据进行哈希处理。好吧,我们抽象一个接口IHash,该接口提供方法Hash(),这样我们就为这5个算法取了个统一的称呼“IHash”。我们快来瞧瞧它们吧:

 


    现在我们解决了称呼问题,这样我们就再也不怕应为记不起名字而找不到人啦。我们赶紧为它们分配一位lead吧,让它们开始干活吧!对IHash来说,它们要干的活就2种:Hash一个东西,验证一个东西。为了节约开销,我们不需要CTO级别的Lead来管理咱们的IHash们,额们只需要找个懂IHash的头。你懂的,O(∩_∩)O哈哈~。

经过大量的海选,我终于找到了这个家伙,大家来瞧瞧它吧:


 这家伙看上去不错,现在我们就来给他机试吧,看看他的真能耐:

Hash篇:

            byte[] data = Encoding.UTF8.GetBytes("hello");
            //为什么没有HashInvoker?先别急,请看下篇文章
            CryptogramInvoker invokerMD5 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.MD5, null);
            Console.WriteLine("MD5:" + Convert.ToBase64String(invokerMD5.Encrypt(data)));


            CryptogramInvoker invokerSHA1 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.SHA1, null);
            Console.WriteLine("SHA1:" + Convert.ToBase64String(invokerSHA1.Encrypt(data)));

            CryptogramInvoker invokerSHA256 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.SHA256, null);
            Console.WriteLine("SHA256:" + Convert.ToBase64String(invokerSHA256.Encrypt(data)));

            CryptogramInvoker invokerSHA384 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.SHA384, null);
            Console.WriteLine("SHA384:" + Convert.ToBase64String(invokerSHA384.Encrypt(data)));

            CryptogramInvoker invokerSHA512 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.SHA512, null);
            Console.WriteLine("SHA512:" + Convert.ToBase64String(invokerSHA512.Encrypt(data)));



验证篇:

byte[] data=Encoding.UTF8.GetBytes("hello");
            byte[] data2;
            CryptogramSetting setting=new CryptogramSetting();
            setting.VertifyString=data;
            
            CryptogramInvoker invokerMD5 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.MD5,setting );
            data2 = invokerMD5.Encrypt(data);
            Console.WriteLine("MD5:" + ((invokerMD5.Decrypt(data2))[0]==1?"true":"false"));

            CryptogramInvoker invokerSHA1 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.SHA1, setting);
            data2 = invokerSHA1.Encrypt(data);
            Console.WriteLine("SHA1:" + ((invokerSHA1.Decrypt(data2))[0] == 1 ? "true" : "false"));

            CryptogramInvoker invokerSHA256 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.SHA256, setting);
            data2 = invokerSHA256.Encrypt(data);
            Console.WriteLine("SHA256:" + ((invokerSHA256.Decrypt(data2))[0] == 1 ? "true" : "false"));

            CryptogramInvoker invokerSHA384 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.SHA384, setting);
            data2 = invokerSHA384.Encrypt(data);
            Console.WriteLine("SHA384:" + ((invokerSHA384.Decrypt(data2))[0] == 1 ? "true" : "false"));

            CryptogramInvoker invokerSHA512 = CryptogramFactory.CreateCryptogramInvoker(Cryptogram.SHA512, setting);
            data2 = invokerSHA512.Encrypt(data);
            Console.WriteLine("SHA512:" + ((invokerSHA512.Decrypt(data2))[0] == 1 ? "true" : "false"));



小结

     经过这么一折腾我们就把这些代码碎片给糅合起来了,这里使用到了一个模式:策略模式。当然还不完善,在这篇文章里只是个雏形。我将在下篇博文中完善它。 


你可能感兴趣的:(.Net,C#,Documents)