65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2001年7月26日

3分钟阅读

viewsIcon

276751

downloadIcon

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)。 如果你想要更多,你必须修改组件。

© . All rights reserved.