当前位置: 首页 > news >正文

使用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,或者本文后面链接的一份文档(这份文档讲得非常详细,也非常好,是我搜集的资料中最好的一份,希望对需要它的人有所帮助)

相关文章:

  • MyEclipse环境下Hibernate入门实例
  • 彻底弄懂CSS盒子模式
  • Linux启动流程
  • 按类别DF特征词选择算法
  • Dell Insprion 6400坏
  • Makefile相关资料
  • 浅谈角色与权限
  • Exchange2007如何给邮件通讯组Distribution Group设置Send As与Behalf 权限
  • 错误与修正
  • 转: CRT检测内存泄漏技巧以及注意问题
  • RIP协议拓扑结构变化-收敛
  • Redhat 下不重启系统发现LUN
  • asp.net导出数据到EXCEL简单有效
  • RedHat 6.0环境下Oracle 8.0.5的安装
  • Windows 7下用无线网卡自建热点共享Internet访问
  • 10个确保微服务与容器安全的最佳实践
  • cookie和session
  • eclipse(luna)创建web工程
  • Git 使用集
  • Github访问慢解决办法
  • gops —— Go 程序诊断分析工具
  • IP路由与转发
  • jdbc就是这么简单
  • pdf文件如何在线转换为jpg图片
  • PHP CLI应用的调试原理
  • PHP那些事儿
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • scala基础语法(二)
  • Sublime Text 2/3 绑定Eclipse快捷键
  • SwizzleMethod 黑魔法
  • 什么是Javascript函数节流?
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 原生 js 实现移动端 Touch 滑动反弹
  • 怎么把视频里的音乐提取出来
  • ​2021半年盘点,不想你错过的重磅新书
  • ![CDATA[ ]] 是什么东东
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (4)事件处理——(7)简单事件(Simple events)
  • (9)STL算法之逆转旋转
  • (C语言)fread与fwrite详解
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)springcloud实战之config配置中心
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读40-45)图像描述1
  • (三)mysql_MYSQL(三)
  • (一)基于IDEA的JAVA基础10
  • (转)memcache、redis缓存
  • .net 无限分类
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net操作Excel出错解决
  • /run/containerd/containerd.sock connect: connection refused