当前位置:编程学习 > 网站相关 >>

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

上一篇:http://www.zzzyk.com/kf/201203/123807.html 

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

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


 \


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

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


 \

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

Hash篇:
[csharp] 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");
            //为什么没有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)));

  \


 

验证篇:
[csharp] 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")); 

  \


 

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


 摘自  GhostHouse 


补充:综合编程 , 安全编程 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,