zoukankan      html  css  js  c++  java
  • 使用windows crypto API加密解密

       最近在学习使用windows crypto API 对数据进行加密和解密,有些收获和经验,在此分享,希望对学习加密解密的朋友们有所帮助。

          经过这次windows crypto API的学习过程,让我明白一个道理。其实,使用windows API编程并不难,首先要有信心。MSDN提供了详细的帮助和指南,许多问题,只要详细查阅MSND,完全可以不用在网上查找任何资料完成自己所需要的编程任务。
           网上的东西,许多都是来自别人的经验介绍,很多,但也很杂,为了搜索到真正有用的资料,往往需要花费很多的时间和精力。

           首先,大家不要觉得加密和解密是一件很深奥的事情,其实说白了,数据加密就是对原始数据进行一种变换而已,比如:你的密码是123456,我对每一位都加1,即234567,写到文件中,这就是加密,只要别人不知道你是对每一位都加1得到的234567,别人即使拿到你的密码文件,他也不知道怎样把你的密码从234567解密出来。(当然,这种简单的加密是可以很容易被破解的)

           数据加密主要分为两种,一种为对称加密,另一种为非对称加密。
           对称加密主要用于大量数据的加密,加密和解密都使用同一份密钥,密钥其实就是一串数据,使用这一串数据对你要加密的数据进行与啊、或啊或者异或什么的,于是就得到了一串人家看不懂的“密文”。

           非对称加密最经典的应用场合是客户端/服务器模式的系统,主要用于需要在网络中传送的少量数据进行加密(比如客户端的用户名、密码向服务器传送)。它使用两份密钥,公钥和私钥。
           公钥用于发给客户端,私钥留在服务器端。数据经过公钥加密后只能使用对应的私钥来解密。
           因此,客户端先对用户名密码信息使用公钥加密,然后向服务器端发送,即使中途被黑客截获,由于他没有私钥,故无法进行解密,当服务器端收到数据后,就使用自己的私钥进行解密。这样就可以实现所有的客户端都使用公钥进行加密,然后放心地发送数据到服务器端,因为只有服务器端才能够解密。(思考一下:这种场合如果使用对称密钥安全吗?)

           windows crypto API提供了对称加密和非对称加密,并且提供了各种加密、解密的算法,要使用相应的算法进行加密解密,只需要对生成密钥的函数的相关参数改变一下即可。
           为了学习使用windows crypto API,我沿袭以前的习惯,花费了大量的时间在网上搜索资料(许多资料用处不大),最终还是在MSND的指导下完全掌握了crypto API的用法,不过,MSND还是有其不足之处,它详细描述了crypto API相关的知识和信息,但没有从宏观上对实现用crypto API加密解密到底需要做哪些事情进行做出明确地指导,故在此,我用下面这幅流程图来告诉大家。
     

             我只从宏观上描述了整个加密解密需要进行的几个流程,具体每一步的代码怎么写,可以参考MSDN,或者本文后面链接的一份文档(这份文档讲得非常详细,也非常好,是我搜集的资料中最好的一份,希望对需要它的人有所帮助)
  • 相关阅读:
    ESAPI = Enterprise Security API
    WingIDE中调试GAE(google app engine)
    C# 发送Http请求 WebClient类
    [转]使用Google App Engine Helper for Django
    装上Window7
    最近遇到个关于接口的奇怪的问题
    JNDI概述(转载)
    Google App Engine 中通过自定义Django的filter解决时区问题
    C# string与byte[]互转
    Python天天美味(33) 五分钟理解元类(Metaclasses)[转]
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1832260.html
Copyright © 2011-2022 走看看