zoukankan      html  css  js  c++  java
  • 微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇

    在完成了后,今天开始介绍企业库中的新模块:Cryptographer(加密模块),这个模块在日常的大多数项目的作用非常重要,例如:网站会员密码、身份证号、网站配置等,通过对信息进行加密可以保证项目数据的安全性。

    今天主要介绍以下几点:

    1、企业库Cryptographer(加密模块)简单分析。

    2、实现一个自定义加密接口。

    3、在项目中应用自定义接口。

    第一点、企业库Cryptographer(加密模块)简单分析

    在我们日常开发中总会使用加密对数据进行加密,我们一般都会在项目中自定义一些加密方法,而企业库就是为了简便这些开发,提供了简便的方式来进行数据加密解密。

    和其他的模块一样,Cryptographer(加密模块)也可以通过简单的配置进行数据加密解密,具体有关配置方面的介绍可以看园子里huangcong所写的文章,我就不多介绍了:

    Cryptography Application Block (初级)

    Cryptography Application Block (高级)

    Cryptographer(加密模块)主要提供2种加密方式:

    1、HashCryptographer(离散加密),这种方法根据特定的算法对数据进行加密,此种加密无法被解密。

    2、SymmetricCryptographer(对称性加密),这种方法也是根据特定的算法对数据进行加密,但是数据加密后可以进行解密。

    通过图可以更好的理解,下图引用自企业库5.0文档:

    pic36

    加密模块中静态类Cryptographer为核心,方便程序员根据配置对数据进行加密解密,其主要包含以下成员:

    1、方法CreateHash,根据配置文件中所配置的离散配置名读取配置对数据进行加密。

    2、方法EncryptSymmetric,根据配置文件中所配置的对称性配置名读取配置对数据进行加密。

    3、方法DecryptSymmetric,根据配置文件中所配置的对称性配置名读取配置对数据进行解密。

    4、方法CompareHash,比较带加密的数据和已加密的数据是否一致。

    5、私有方法GetHashProvider、GetSymmetricCryptoProvider,根据配置文件名获取离散加密、对称加密实例。

    在这个加密模块中,静态类Cryptographer为我们提供了根据配置名进行加密解密方式,同时还提供了一个抽象类CryptographyManager来实现自定义的加密解密管理器,在加密模块中已经为我们提供了一个CryptographyManager的实现——CryptographyManagerImpl

    抽象类CryptographyManager本质上就是一个非静态的Cryptography,其定义了4个抽象方法:

    1、方法CreateHash。

    2、方法EncryptSymmetric。

    3、方法DecryptSymmetric。

    4、方法CompareHash。

    实现类CryptographyManagerImpl则主要实现了抽象类CryptographyManager,其主要信息如下:

    1、字段IDictionary<string, IHashProvider> hashProviders,离散加密键值对集合,包含了多个离散加密实现。

    2、字段IDictionary<string, ISymmetricCryptoProvider> symmetricCryptoProviders,对称加密键值对集合,包含了多个对称加密实现。

    3、字段IDefaultCryptographyInstrumentationProvider instrumentationProvider,提供加密模块出现错误报告

    4、构造函数,一共有3个构造函数,接收泛型列表形式的离散加密实现、对称加密实现以及

    5、加密解密方法CreateHash、EncryptSymmetric、DecryptSymmetric,这3个方法接收3个参数:所配置的 加密解密实例名、待加密数据和加密模块的错误报告(IDefaultCryptographyInstrumentationProvider)。

    其内部会根据实例名到hashProviders或symmetricCryptoProviders这2个列表中寻找相应的加密解密实现,然后调用实现进行加密解密。

    在实际的项目开发的开发过程中,我们既可以通过静态类Cryptographer简单的完成对数据的加密解密,也可以通过实现抽象类CryptographyManager来编写符合项目需求的加密解密管理器,总的来说企业库的这个Cryptographer模块已经为我们提供了很好的加密解密封装,同时又提供了扩展接口在其基础上可以进行进一步扩展,大大方便了我们的日常项目开发。

    第二点:实现一个自定义加密接口

    在第一点中,我简单介绍了企业库Cryptographer模块的重要信息,现在我来介绍下企业库Cryptographer模块为我们提供的加密解密扩展接口。

    上面说过,企业库Cryptographer模块提供了2种加密解密方式:

    1、HashCryptographer(离散加密),这种方法根据特定的算法对数据进行加密,此种加密无法被解密。

    2、SymmetricCryptographer(对称性加密),这种方法也是根据特定的算法对数据进行加密,但是数据加密后可以进行解密。

    这2种加密解密方式对应着2个接口:IHashProvider和ISymmetricCryptoProvider,分别看下这2个接口的代码:

    IHashProvider接口:

    public interface IHashProvider
    {
        byte[] CreateHash(byte[] plaintext);
     
        bool CompareHash(byte[] plaintext, byte[] hashedtext);
    }

    这个接口只有2个方法:

    1、方法CreateHash,接收传入的待加密数据(字节数组)根据具体实现进行离散加密返回加密后的数据(字节数组)。

    2、方法CompareHash,接收待加密数据(字节数组)和已经加密后的数据(字节数组),调用具体实现的离散加密方法将待加密数据进行加密然后与已加密数据进行比较,看其是否相等。

    ISymmetricCryptoProvider接口:

    public interface ISymmetricCryptoProvider
    {
        byte[] Encrypt(byte[] plaintext);
     
        byte[] Decrypt(byte[] ciphertext);
    }

    这个接口也比较简单,也只有2个方法:

    1、方法Encrypt,接收待加密数据(字节数组),调用实现方法进行加密,返回加密后的数据(字节数组)。

    2、方法Decrypt,接收已加密数据(字节数组),调用实现方法进行解密,返回解密后的数据(字节数组)。

    而如果我们需要扩展自定的加密解密方法据需要从上面2个接口入手,根据需求判断是要进行离散加密还是对称性加密实现不同的接口。

    以上就是今天所要介绍的企业库Cryptographer模块信息,主要介绍了Cryptographer模块的常用类、加密解密管理器,同时简单介绍了Cryptographer模块的加密解密扩展接口。

    在下一篇文章中我将继续介绍如何实现自定义离散加密和对称性加密方法,以及在项目中使用自定义的加密解密方法

  • 相关阅读:
    调用组件的C++代码
    如何用C语言读写文件
    linux 常用命令总结(tsg)
    com.mysql.jdbc.MysqlDataTruncation: Data trunca...
    SpringMVC配置
    中文转换成Unicode编码 和 Unicode编码转换为中文
    在visual studio中运行C++心得
    博客园博客转至个人网站博客声明
    Seafile安装踩坑
    不要因为走得太远,而忘了自己的初心
  • 原文地址:https://www.cnblogs.com/wuxl360/p/5753504.html
Copyright © 2011-2022 走看看