技巧篇:结合反射技术实现多算法动态加密

这个题目,我姑且这样叫吧,照例,我们先来分析一下需求。
比如有一个设置密码的功能,但用户希望能够自己选择密码的加密算法,如MD5、HMAC、SHA1等,然后程序会根据用户所选择的算法对密码进行加密并存入数据库,同时在配置文件中记录下用户的选择。
按照一般的思路,我们可能会做一个分支判断,如


 

呵呵,其实我们不必要这样做,来,先来看看MD5、HMAC、SHA1、SHA384等类有什么共同的特征?
1、都是通过调用Create静态方法来创建一个实例,当然,像MD5这些类都是抽象类,是不能被实例化的。其实,它们都返回一个名为“算法名CryptoServiceProvider”的类实例,如MD5CryptoServiceProvider、SHA1CryptoServiceProvider等,这些类都是对算法计算的具体实现。
2、都是通过调用ComputeHash方法计算哈希值的。
 
而且,这些类都是位于同一个命名空间下,因些,根据不同的算法进行加密,唯一不同的是类名,也就是说,我们的代码只写一次就可以了,把代码封装在一个方法中,通过在参数中传递类名。
 
能做到这种功夫的,也就用到反射了,通过反射动态动调用类成员来完成。

 


 

接着需要一个方法来把字节数组转为字符串。

 


 

然后,我们就可以在其它代码中使用了。

 


 

好了,现在可以运行一个试试。

 

 

 

 

 

 

 

posted @ 2012-01-15 11:54  东邪独孤  阅读(332)  评论(0编辑  收藏  举报