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


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


     

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


     

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


     

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


     

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

  • 相关阅读:
    MySql学习20----数据库范式
    MySql学习17----数据库事务(01)
    MySql学习19-----用户管理
    MySql学习18----数据库事务---命令使用(02)
    MySql学习16----查看mysql库大小、表大小、索引大小
    MySql学习13----触发器
    MySql学习15----MySql日志
    java公开课-04-log4j
    java公开课-04-异常
    java公开课-03-内部类
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/2422665.html
Copyright © 2020-2023  润新知