使用Win32 加密API 来进行加密操作
2017-09-30 11:48
501 查看
原文链接
https://www.codeproject.com/Articles/11578/Encryption-using-the-Win-Crypto-API介绍
如今,信息技术的使用变得越来越复杂。进行和传输和存储的数据经常是分类的,且需要防止第三方读取。这个特别的问题的关键字是(从逻辑和物理上讲)“安全”。安全的一个部分是加密。人们通常认为安全仅仅是随后插入的东西,这是绝对不正确的。当加密被包含在最终的产品的时候,其使用的经验法则可以被归纳为下面这几条:
1.不要依赖于算法本身的加密操作。
2.公开算法,但是密钥保持私有。
RSA 加密
如今,最有名的加密算法之一叫做”RSA 加密“。这种加密形式使用非对称密钥。这意味着如果你有第一个键,则无法评估第二个键,反之亦然。RSA 是一个公钥加密系统,它通常使用两个算法(E,D),一个用来加密, 一个用来解密。使用者有两个密钥对,包含一个私钥(SK)和一个公钥(PK)。
CBC 模式
RSA 是一种典型的使用CBC(Clipher Block Chaining)的加密方式。这意味着被加密的信息被分成小块。每一个块使用XOR 操作符链接在一起,然后被加密。使用CBC 模式操作的时候,需要所有的块都有同样的大小。如果最后一个块比其它的块小,此时有必要使用填充的方法使其大小保持一致。正式的,CBC 模式以一下方式操作,其中以y0开始,y0 是64位初始化向量。
解密时,整个操作只是逆转了。这意味着密码块被解密然后被异或。这样我们最终得到明文。
使用代码进行加解密
Win32 API 提供了一些可以提供加密功能的函数。使用系统提供的加密API 的好处是你不用再去寻找第三方的机密提供者,并研究它的安装和使用方法。缺点也比较明显,无法兼容其它的操作系统平台。在执行任何操作之前,我们必须创建一个context。执行加密操作的时候将使用这个context 好几次,因此,直到加密操作完成,我们应该保持代表context 的句柄没有被关闭。
当我们得到了context,我们需要得到一个key,加密的时候我们需要使用这个key。key 可以从头创建也可以从文件中导入。下面的代码片段中,pbBlob(如果不为NULL)是从文件中取出的一个包含key 的二进制数据。
在存储key 的使用 PKCS#7 标准是不错的选择,本文附带的程序没有使用该标准。
导入或者创建key 之后就可以执行加密或者解密操作了。加密和解密操作是基于这个key的。
解密与加密并没有特别大的区别。与加密操作一样,只需一次调用即可将密文解密。
需要注意的地方
明文包含任何信息的文本/数据。在执行加密之前,最好将明文放入到一个无符号字符数组中以避免加密执行过程中可能导致的问题。相关文章推荐
- 使用AES算法对文件进行加密/解密的操作(JAVA)
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证 (转发)
- servlet学习笔记(3)-使用Java Servlet API 进行会话管理(对session的操作)
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证(代码)
- 使用iServer JAVA API访问iServer数据服务进行数据操作示例
- MFC 文件操作及C、C++、win32 API对文件操作的复习和CFileDialog的使用
- python—如何使用post进行登录操作与非对称加密的破解
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- [ElasticSearch]使用 java API 进行CRUD操作
- 【大数据系列】windows环境下搭建hadoop开发环境使用api进行基本操作
- 使用系统API进行数据库操作
- 使用servlet3.0提供的API来进行文件的上传操作
- Elasticsearch简单使用系列--使用Rest API进行CRUD操作
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证
- Java-web下使用RSA进行加密解密操作
- c#中使用api(shfileoperation)进行文件操作,特别详解了回收站相关参数
- drupal7中利用profile2的api对使用profile2字段的对象进行操作|durpal profile2 api