zoukankan      html  css  js  c++  java
  • 技巧篇:结合反射技术实现多算法动态加密

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


     

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


     

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


     

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


     

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

  • 相关阅读:
    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
    马士兵_JAVA自学之路(为那些目标模糊的码农们)
    Java知识点总结
    解决:对COM组件的调用返回了错误HRESULT E_FAIL
    平差方法
    二进制、八进制、十进制、十六进制之间转换
    解决电脑复选框图标不正确方法
    SQL语句中的Create
    字段的值转换为大小写
    SQL NOW() 函数
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2457949.html
Copyright © 2011-2022 走看看