如何在你的 ASP 项目中使用 Crypto API。





5.00/5 (2投票s)
2001年7月26日
3分钟阅读

276751

1184
本文展示了如何创建一个具有加密/解密功能的 ATL COM 组件,以及如何在 ASP 程序中使用它。 它还展示了如何在 MTS 中注册组件。
摘要
此应用程序使用 ATL、MFC、ASP 和 Crypt API。 它将演示如何创建一个提供 2 个加密功能的 ATL 项目,如何在你的 ASP 项目中使用此组件,以及如何在 MTS 中注册该组件。 本文还包含一个 GUI 客户端控制台,用于直接测试加密功能。
此组件可以在 Visual Basic、Access 或 Microsoft SQL 中使用。
引言
最近,我为一个关于希腊、塞浦路斯和罗马尼亚证券交易所的金融项目工作 (www.greekmarkets.com, http://reporter.fasma.ro )。 该项目主要使用 ASP 和 VB COM 进行编码,以及一些 ATL 组件作为 SQL 数据库上的中间层。 我编程的中间层组件是使用 ATL 构建的,并使用 Crypto API。 这个想法是将加密的数据提供给 HTTP,这些数据对 ASP 页面很有用。 由于 HTTP 传输,数据以十六进制格式编码。
概述
首先,我将向你展示如何使用 ATL 控件以及如何提供查询我们组件的方法。
创建一个新的 ATL COM AppWizard 项目。
在服务器类型中选择动态链接库 (DLL),并选中“支持 MFC 和 MTS”。
将一个新的 ATL 对象添加到你的类中。 从你的 ATL 对象向导中选择“对象”->“简单对象”。
在属性选项卡页面中,在线程模型中选择“Free”选项。
现在我们有了一个非常好的组件。 通过方法或属性向其他程序提供数据更为重要。 不幸的是,Microsoft 向导有点简陋,用户必须手动输入每个参数及其类型。
详细说明
使用加密 API 并加密你的消息的最简单方法如下
// Get handle to user default provider. CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)
此函数返回特定 CSP 的句柄,其中包括 CSP 内特定密钥容器的规范。 此密钥容器是特别请求的密钥容器,或者是当前登录用户的默认密钥容器。 请注意,第二个和第三个参数为 NULL。 这意味着我们的代码将始终生成相同的密钥,而与当前登录用户无关,并且/或者加密是在一台计算机上完成,而解密在另一台计算机上完成。
// Create hash object. CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash) // Hash password string. CryptHashData(hHash, (BYTE *)szLocalPassword, dwLength, 0) // Create block cipher session key based on hash of the password. CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey) // Encrypt data CryptEncrypt(hKey, 0, TRUE, 0, pbBuffer, &dwLength, dwLength) // Coding the result in hexadecimal format HtoA(dest, szPassword, sizeof(TCHAR)*_tcslen(dest) )
在 ASP 页面中使用该组件非常容易(在 Visual Basic、Access 或 Microsoft SQL 中也是如此)
dim myOEncrypt dim src, dest set myOEncrypt = Server.CreateObject("EncryptionATL.Encryption.1") src = "CryptoAPI" Response.Write "src: " Response.Write src Response.Write "Crypt: " dest = myOEncrypt.Crypt(src) Response.Write dest Response.Write "LastError: " Response.Write myOEncrypt.LastError Response.Write "Decrypt: " src = myOEncrypt.Decrypt(dest) Response.Write src Response.Write "LastError: " Response.Write myOEncrypt.LastError set myOEncrypt = nothing
安装
- 将 DLL 复制到具有系统执行权限的目录下,并使用 regsvr32 命令注册它,或者将其放在 MTS 上。 这种方法更好,因为如果我们想修改组件并再次注册它,这是可能的,而无需像使用 regsvr32 命令那样重新启动计算机 - regsvr32 命令会“阻止”你的 dll 文件。
打开 MTS 控制台(如果你有 NT4)或组件服务 (Windows 2000)。 在“计算机”->“我的电脑”->“COM+ 应用程序”中,选择“新建应用程序”。 给它一个名称,例如“Crypt”;
在新的 Crypt COM+ 应用程序中创建一个新组件
并选择你的 crypto dll 文件
要修改新创建的组件的属性,请右键单击它
直接使用对话框控制台。 在编辑框中输入一些字符串,然后单击按钮!
将带有 asp 页面的目录复制到 Web 下 - 试试看吧!
注意
该程序设计为仅使用小字符串,带有一些数字(来自表中的 ID)。 如果你想要更多,你必须修改组件。