L006001006-CryptoAPI安全服务的编程-数据加密实验.doc

L006001006-CryptoAPI安全服务的编程-数据加密实验.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
L006001006-CryptoAPI安全服务的编程-数据加密实验

?课程编写 类别 内容 实验课题名称 CryptoAPI安全服务的编程-数据加密实验 实验目的与要求 通过实验了解CryptoAPI对数据文件加、解密过程,加深安全加密应用服务框架的理解。 实验环境 VPC1(虚拟PC) 操作系统类型:windows xp,网络接口:eth0 VPC1?连接要求 与实验网络相连 软件描述 VC6.0 预备知识 Windows CryptoAPI是微软公司提出的安全加密应用服务框架,也是PKI推荐使用的应用程序编程接口(API),它提供了在Win32环境下使用认证、编码、加密和签名等安全服务时的标准加密接口,用于增强应用程序的安全性与可控性。应用开发者可以在不了解复杂的加密机制和加密算法的情况下,简便、快速地开发出标准、通用和易于扩展的安全加密应用程序。CryptoAPI提供的功能主要有:密钥管理、数据编码和解码、数据加密和解密、数字签名和验证、证书及证书库管理等。 文件加密 创建会话密钥 为保证数据加密的效率,CryptoAPI规定数据加密操作必须基于对称密码进行。于是加密方进行加密操作首先必须创建会话密钥,一般可以通过调用函数CryptGenKey或CryptDeriveKey创建,在创建会话密钥时指定加密算法。 加密数据 在创建会话密钥后,则可以调用CryptEncrypt函数进行加密操作。加密操作需要注意饿是每次加密数据库的长度必须根据具体的算法和算法类型确定,一般来说,加密数据块长度为算法规定的基准加密块长度的整数倍。对于分组密码,需为密文数据块预留一个基准加密块长度的空间。 安全保存或交换会话密钥 数据加密完成后,当在今后的某个时间或其他用户需要解密数据时,必须保存会话密钥以备后用,或者是传输会话密钥给特定用户以使其能正常进行解密操作。 程序设计 如教材图1所示 图1 程序流图 获取CSP 当进行加密服务等相关服务时,必须先获取某个CSP句柄,这是一般CryptoAPI编程的第一步。获取CSP句柄的函数为CryptAcquireContext,取得指定CSP句柄,以后的任何加密操作就针对此CSP句柄,函数首先查找有dwProvType和pszProvider指定的CSP,如果找到了CSP,函数就查找由此CSP指定的密钥容器。有适当的dwFlag标志,这个函数就可以创建或销毁密钥容器,如果不要求访问私钥的话,也可以提供对CSP临时密钥容器的访问。 会话密钥创建与交换 创建会话密钥会根据是否输入口令选择不同的创建方法,当输入口令时,则调用GenKeyByPassword函数通过数据基创建;当不输入口令时,则调用GenKeyByRandom函数随机创建。 GenKeyByPassword创建会话密钥的方式是以输入口令为数据基,然后调用CryptDeriveKey函数来创建会话密钥。这种方式创建的会话密钥,只要知道输入口令、创建会话密钥的CSP和加密算法,则可以再次创建一样的会话密钥,于是在这种方式下可以不用在程序中与其他用户交换会话密钥,而通过某种线下的方式来交换会话密钥,比如通过电话告诉对方,并且这种方式更为安全。 GenKeyByRandom创建会话密钥的方式是调用CryptGenKey创建一个随机会话密钥。由于这个会话密钥是随机产生的,以后几乎不可能再现,于是必须以某种方式与其他用户交换会话密钥。这里选择的方式为先调用函数CryptExportKey导出会话密钥到密钥数据块中,导出时用目标用户的交换密钥对的公钥加密会话密钥,然后把密钥数据块写到明白文件中。如此则可以保证其他用户可以从目标文件中还原会话密钥。 文件加密 创建好会话密钥后就可以进行加密操作。加密首先要确定每次加密数据长度,每种加密算法都有一个基准加密块长度,加密数据块长度须为算法规定的基准加密块长度的整数倍,对于分组密码,须为密文数据块预留一个基准加密块长度的空间。这里的算法为RC4,它是分组算法,基准加密块长度为8,程序确定的加密长度dwBlock-Len为1000-1000%ENCRYPT_BLOCK_SIZE,加密后密文数据dwBufferLen长度为但我BlockLen+ENCRYPT_BLOCK_SIZE,确定加密长度和加密后密文数据长度后,循环加密源文件,每次从源文件中取出dwBlockLen长度数据,加密,密文存入目标文件。 实验内容 使用VC编程,实现对文件的加、解密。 实验步骤 学生单击“试验环境”按钮,出现如教材所示图2网络拓扑 图2 点击桌面Microsoft Visual C++ 6.0进入实验环境,如教材图所示 点击文件——新建,在弹出的窗口中选择选项卡“工程”,并选中win32 Control Application,工程名称填写test,位置存储在C盘目录下,点击确定

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档