VC有没有比较简单的加密函数,不需要一堆的代码和参数
在做一个很小的办公管理软件,需要对用户密码加密,不需要很复杂
UNIX下有个crypt(),VC有没有类似的简单好用的加密函数
问题点数:50、回复次数:11Top
1 楼potatoli(新来的)回复于 2003-09-03 11:20:00 得分 5
upTop
2 楼my_mtx(水木)回复于 2003-09-03 13:32:27 得分 5
Program Files\Microsoft Visual Studio\VC98\Include\WINCRYPT.H
看这个头文件,里面就是微软的加密库函数
Top
3 楼ihavenojob(喜欢下雨天)回复于 2003-09-03 14:10:59 得分 0
可是那么多函数,该用那个呢?而且参数都那么多,有没有简单一点的,直接传入明文传出密文Top
4 楼ihavenojob(喜欢下雨天)回复于 2003-09-03 15:15:18 得分 0
那位高人帮帮忙阿Top
5 楼ihavenojob(喜欢下雨天)回复于 2003-09-03 16:04:58 得分 0
???Top
6 楼NeoBean(Neo-Bean)回复于 2003-09-04 10:31:11 得分 30
Windows 提供的 CryptAPI 是很全面的要做出简单的明文密文加密解密其实不难。给你说说步骤想信就能够理解了。下面提供最普通的消息编码、解码的步骤,希望对你有帮助。
编码:
一、取得编码消息块的大小,调用CryptMsgCalculateEncodedLength(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL, 要编码的消息长度 + 1),该函数返回消息块大小。
二、得到编码消息块大小后就分配指定大小的空间。
三、打开要编码的消息,调用CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, 0,CMSG_DATA, NULL, NULL, NULL),该函数返回一个消息句柄。
四、消息更新,利用刚刚得到的消息句柄将消息更新,调用CryptMsgUpdate(消息句柄, 要编码的明文, 编码消息长度 + 1, 是否位最后的消息编码,如果你只调用一次编码则该参数为TRUE)。
五、取得消息编码后的密文,调用CryptMsgGetParam(消息句柄, CMSG_BARE_CONTENT_PARAM, 0, 第二步分配的存储编码后消息的缓存, 缓存大小),此方法调用成功后密文则存放在缓存中可以写成文件了。
六、关闭消息编码。
解码:
一、打开要解码的消息,调用CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL, NULL),该函数返回一个消息句柄。
二、将密文(编码后的密文)更新,调用CryptMsgUpdate(消息句柄, 密文内容, 密文大小,是否为最后一次调用)。
三、取得解码后的明文大小,调用CryptMsgGetParam(消息句柄,CMSG_CONTENT_PARAM, 0, NULL, &dwSize)。该函数成功后dwSize为解码后的明文大小。
四、为保存解码后的明文分配dwSize的存储空间。
五、取得解码后的明文内容,调用CryptMsgGetParam(消息句柄, CMSG_CONTENT_PARAM, 0, 明文存储缓存, 缓存大小)。该函数调用成功后即可得到接密后的明文。
六、关闭消息解码。
// 手痛了,费神了。。汗!!Top
7 楼sunheroshang(简单.剑胆)回复于 2003-09-04 11:06:48 得分 5
学习Top
8 楼mathliu(lvhong)回复于 2003-09-04 11:11:32 得分 5
//下面的算法即所谓的加法同余密码,强度不是很高,但稍微修改后应该够用了。
//其中的13和95可根据需要换成别的数字
//算法很简单,解密过程就不说了。
char* CTttDlg::ROT13(char *szPassword)
{
if(szPassword==NULL)
return NULL;
for(int i=0;*(szPassword+i)!='\0';i++)
*(szPassword+i)=(*(szPassword+i)+13)%95;
return szPassword;
}
Top
9 楼ihavenojob(喜欢下雨天)回复于 2003-09-04 14:54:34 得分 0
多谢各位的指点,我在大学的专业不是计算机,所以密码学的知识很欠缺。
我的做法是将用户的密码加密,保存到数据库中,用户登陆时,将加密的密码和数据库中的相比较,现在有个问题就是:用这些方法加密后的密文会不会包含值为0的字节啊???因为到时候取数据和比较密码都用的是操作字符串的函数,如果包含0的话会有问题Top
10 楼flinming(flinming)回复于 2003-09-04 15:09:12 得分 0
异或了Top
11 楼mathliu(lvhong)回复于 2003-09-05 16:56:02 得分 0
使用前面的 char* ROT13(char *szPassword)这个函数是不会出现0字符的,而CryptAPI或者异或均不适合你这里的情况。Top




