[译者的话] 该文介绍了一种直接调用 CryptoAPI 函数对字符串进行加密和解密的用法,非常简单、实用。其中,有作者所封装的一个加密/解密类,是可以直接复用的源码,我想是能够解决我们的一些实际问题的。而且,将初始化函数封装在构造函数中,也显得比较巧妙,对于初学者不失为一篇好的教材。
用于加密/解密所需要的三个函数:
1、初始化 CryptoAPI 的函数。
2、加密函数。输入参数为原始字符串和一个密钥。
3、解密函数。输入参数为加密后的字符串和一个密钥。
这几个函数的原型如下:
BOOL SetupCryptoClient(); BOOL EncryptString(TCHAR* szPassword,TCHAR* szEncryptPwd,TCHAR *szKey); BOOL DecryptString(TCHAR* szEncryptPwd,TCHAR* szPassword,TCHAR *szKey);函数及其参数的含义如下:
BOOL SetupCryptoClient();该函数初始化解密客户程序。
BOOL EncryptString(TCHAR* szPassword,TCHAR* szEncryptPwd,TCHAR *szKey)
对一个字符串进行加密
1、szPassword 是原始字符串
2、szEncryptPwd 是 加密后的结果
3、szKey 是加密的密钥
BOOL DecryptString(TCHAR* szEncryptPwd,TCHAR* szPassword,TCHAR *szKey)
对一个字符串进行解密
1、szEncryptPwd 是一个已经加密的字符串
2、szPassword 是解密后的字符串
3、szKey是解密密钥。它必须和该字符串在原来加密时所用密钥一致。
该程序是一个控制台程序,主要想说明加密/解密函数的用法。
编译条件
如果由于引用了HCRYPTPROV的数据类型,而使得编译无法通过,可用下面的办法解决:
1、 清除 #define WIN32_LEAN_AND_MEAN
2、 加上:#define _WIN32_WINNT 0x0400
3、 在链接设置中,添加库"advapi32.lib"
C++类的考虑
1、生成一个类,比如,CCryptString。
2、在构造函数中,调用初始化函数SetupCryptoClient,并且将结果保存在一个成员变量中。
3、将加密/解密函数直接封装在类的成员函数中。
第二个例子包含了一个类的用法。
关于该加密技术的背景信息,请阅读MSDN的有关内容。在Internet网上也有很多相关资料。 希望这个演示工程能够满足你的需要。
