The Cryptography API, or How to Keep a Secret(三)

原创 2004年02月07日 22:53:00

几个加密API函数

[编者注:下面缩进部分的文件引用自MSDN Library, Platform, SDK, DDK 文档。]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

初始化CSPCryptAcquireContext, CryptReleaseContext

函数CryptAcquireContext用来获得CSP中一个特定密鈅容器的句柄。返回的句柄然后就可以对选择的CSP进行调用。

函数CryptReleaseContext用于释放函数CryptAcquireContext返回的句柄。 CryptReleaseContext 不会删除任何Cryptography API 对象,它仅仅释放对象的句柄。

函数CryptAcquireContext执行两个操作。 首先试着查找变量中指定的CSP 如果找到,函数试着查找CSP中匹配指定密鈅容器名的密鈅容器。此函数也可以用于建立、删除密鈅容器,这取决于函数中的参数值。

取得默认CSP中默认密鈅容器的代码如下所示:(译注:原文章代码中注释为英文,此处译为中文,下面情况同)

如果CryptAcquireContext调用成功,返回值非零,变量hProv 即为要取得的密鈅容器句柄。

要在默认CSP中添加或者创建一个密鈅容器,要写的代码如下:

如果CryptAcquireContext调用成功,返回值非零,变量hProv 即为新的密鈅容器句柄。

要从默认CSP中删除一个存在的密鈅容器,要写的代码如下:

如果CryptAcquireContext调用成功,返回值非零,变量hProv 指向的密鈅容器已经删除,此密鈅容器不再有效。

散列数据:CryptCreateHash, CryptHashData, CryptGetHashParam, CryptDestroyHash

当我说“散列法”或“散列”("hashing" or "hash" )时,是指从一块数据中派生出一个数值的方法或算法。这可能是简单的将所有数据位相加,或复杂到要对数据进行傅立叶变换。(译注:散列也被称为哈希,杂凑)

上面列出的四个函数是用于创建或者维护从提供的数据生成的散列值的,一般一起使用:

  • 函数 CryptCreateHash用于散列数据时初始化。它返回CSP散列对象的句柄,此句柄会在后续CryptHashData函数散列数据时使用。
  • 下一步是调用CryptGetHashParam 函数取得散列值。
  • 函数 CryptDestroyHash 释放函数 CryptCreateHash返回的句柄。CryptDestroyHash不会删除任何加密 API 对象,它仅仅释放散列对象的句柄。

CryptHashData 函数用来从提供的数据中计算密码散列。为计算一个大数据块或者数据块的几个部分时,此函数可被调用多次。例如,我们要对缓冲区pBufferdwBufferLen字节长的数据进行散列。在此例子中我仅使用CALG_MD5 散列算法来实现此目的。 加密 API SDK 文档中还提供对许多其它算法详细的描述。 本例子假定只散列一块数据。一旦调用CryptGetHashParam函数取得了散列值,此散列实例对象便不能再散列其它数据了。

上面例子为pBuffer 指向的数据生成一个散列值。如果还要散列其它数据,用这个数据调用 CryptHashData,产生的散列值仍会是原来的值。已警告过使用HP_HASHVALUE参数调用 CryptGetHashParam 会阻止使用此对象继续进行散列。

The Cryptography API, or How to Keep a Secret (一)

 The Cryptography API, or How to Keep a Secret译注:因本文发布时间较早,文中所阐述某些内容已发生变化,发生变化处译者已标出。Robert Coleridg...
  • MSVCer
  • MSVCer
  • 2004年02月07日 22:51
  • 1027

The Cryptography API, or How to Keep a Secret (二)

加密当进行数据加密时,明文消息(plain-text message)在被编码后会看起来象完全随机的二进制数据,以至于没有密鈅就很难将其转化为原来的消息。本文中使用如下定义:消息(Message):指...
  • MSVCer
  • MSVCer
  • 2004年02月07日 22:51
  • 1462

The Cryptography API, or How to Keep a Secret(五)

CRYPTOAPI 例程概述随本文提供的CRYPTOAPI 例程是一个“完整”的加密/解密工具。程序能够向默认的CSP中添加与移除用户,使用或不使用密码进行加密与解密文件,签署与验证签名,显示默认CS...
  • MSVCer
  • MSVCer
  • 2004年02月07日 22:53
  • 898

The Cryptography API, or How to Keep a Secret(四)

生成密鈅:CryptDeriveKey, CryptGenKey, CryptDestroyKey这三个函数用来产生密鈅句柄: CryptDeriveKey 函数从一个指定的密码(password)产...
  • MSVCer
  • MSVCer
  • 2004年02月07日 22:53
  • 1017

Java ™ Cryptography Architecture (JCA) Reference Guide

Cryptographic Functionality Available With JSSE Cryptographic Algorithm * Cryptographi...
  • liuyaoyue
  • liuyaoyue
  • 2014年04月24日 11:43
  • 1662

总结之知识图谱前沿技术课程

本文的内容主要基于2017年12月2日在苏州大学举办的知识图谱前沿技术课程(感谢各位老师的talk,受益良多)以及本人在之前阅读的有关paper。...
  • MrPhD
  • MrPhD
  • 2017年12月03日 17:37
  • 350

How to Keep Your Skills Up-to-Date in the New Year(如何提升测试技能)

原文链接:http://www.joecolantonio.com/2014/01/14/test-automation-trends-for-2014-how-to-keep-your-skills...
  • xiaoguanyusb
  • xiaoguanyusb
  • 2015年12月05日 20:39
  • 132

HDU-balloons-求颜色最多的气球的颜色

问题及代码: /* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:HDU.cpp *作 者:单昕昕...
  • MIKASA3
  • MIKASA3
  • 2015年01月19日 14:26
  • 1026

App Key 和 App Secret 有什么用?

App key简称API接口验证序号,是用于验证API接入合法性的。接入哪个网站的API接口,就需要这个网站允许才能够接入,如果简单比喻的话:可以理解成是登陆网站的用户名  App Secret简称...
  • qq_24656927
  • qq_24656927
  • 2017年02月07日 15:55
  • 770

Java Cryptography Architecture(JCA)——加密的那点儿事儿(加密服务提供者、算法名称、转换名称)

Java Cryptography Architecture——加密的那点儿事儿(加密服务提供者、算法名称、转换名称)...
  • dafeige8
  • dafeige8
  • 2017年07月27日 19:15
  • 567
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:The Cryptography API, or How to Keep a Secret(三)
举报原因:
原因补充:

(最多只允许输入30个字)