关于MD5的问题

qq14168 2008-02-25 11:51:29
我在这找了个MD5的类,可是不知道要怎么用,大虾们教教我好么?
void MD5Update ( unsigned char *input, unsigned int inputLen);
我知道第一个参数是要输入需要加密的字符串,可是,我的字符串是从输入框里取出来的
是CString的,怎么将他转成char*的呀?
第二个参数是这个字符串的长度。

如果MD5算好了,怎么将算好的字符返回给我的程序呢?这个是我最疑惑的,下面是那个MD5的.h 文件
我发上来给大家看,拜托帮我看看,指教我一下,谢谢!

最好能写一个小的例子给我看一下,万分感谢!

#pragma once
#ifndef _LGY_MD5_H
#define _LGY_MD5_H

/* MD5 Class. */
class MD5 {
public:
MD5();
virtual ~MD5();
void MD5Update ( unsigned char *input, unsigned int inputLen);
void MD5Final (unsigned char digest[16]);

private:
unsigned long int state[4]; /* state (ABCD) */
unsigned long int count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
unsigned char PADDING[64]; /* What? */

private:
void MD5Init ();
void MD5Transform (unsigned long int state[4], unsigned char block[64]);
void MD5_memcpy (unsigned char* output, unsigned char* input,unsigned int len);
void Encode (unsigned char *output, unsigned long int *input,unsigned int len);
void Decode (unsigned long int *output, unsigned char *input, unsigned int len);
void MD5_memset (unsigned char* output,int value,unsigned int len);
};

#endif
...全文
157 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq14168 2008-02-28
  • 打赏
  • 举报
回复
呵呵,谢谢各位的帮助,我已经明白要怎么搞了,其实不需要解密,直接把MD5串保存下来就可以了,以后直接用这个MD5后的串做比对就好了!
谢谢大家,非常感谢,为表示感谢,一人分一点分,嘿嘿!!!辛苦辛苦
sxcong 2008-02-28
  • 打赏
  • 举报
回复
暴力解密是什么意思吗?还原吗?
比如我这有1G的数据,进行MD5,应该是变成了32个字节的数字吧,你暴力解密,结果是什么呢?
yuhao1013 2008-02-28
  • 打赏
  • 举报
回复
MD5是散列函数,是不可逆的函数,很难破解的
QSmile 2008-02-27
  • 打赏
  • 举报
回复
MD5算法是不可逆算法,可以暴力解密~~~

----------------
不知道你說的解密是什麼意思?

MD5 是摘要算法,怎麼解密
lzpggg 2008-02-26
  • 打赏
  • 举报
回复

bool CFormLeft::EncryptFile(BYTE* pBuf,unsigned long* pcBufLen)//加密文件数据,返回加密后的数据长度
{
/*//动态扩大缓冲区;方法一
BYTE *qdd_file=(BYTE *)calloc(1024,sizeof(BYTE));
BYTE * newQdd_File = new BYTE[1050];
memset(newQdd_File,0xcc,sizeof(BYTE)*1050);
memcpy(newQdd_File,qdd_file,1024*sizeof(BYTE)); */
if(*pcBufLen%8 != 0) //文件内容必须为8的整数倍,不为整数就补上;
{
*pcBufLen = (*pcBufLen/8 + 1) * 8; //扩大后字节数(8的倍数)
realloc(pBuf,*pcBufLen);//动态扩大缓冲区;
}
CBlowFish bl;
BYTE * pByteKey=(BYTE*)key;//转换密钥为BYTE *或unsigned char*类型,c++只有unsigned char没有BYTE(c语言)
//AfxMessageBox(key);
bl.Initialize(pByteKey, 32,CBlowFish::ECB);//构造加密密钥,初始化.ECB为能被8整除的数据;
bl.Encode(pBuf, pBuf, *pcBufLen); //加密文件数据
return true;
}

bool CFormLeft::DeCryptFile(BYTE* pBuf,unsigned long cBufLen)
{
CBlowFish bl;
BYTE * pByteKey= (BYTE*)key;
//AfxMessageBox(key);
bl.Initialize(pByteKey, 32, CBlowFish::ECB);//构造解密密钥,初始化
bl.Decode(pBuf, pBuf, cBufLen); //解密文件数据
return true;
}
qwertxp 2008-02-26
  • 打赏
  • 举报
回复
2楼是无责任乱答。2楼的是DES的加密吧。
MD5属于报文摘要算法,不可逆,就是没有解密。
应该是MD5Update来加密,MD5Final来取摘要结果,生成16位的摘要,强度低了点。
snowbirdfly 2008-02-26
  • 打赏
  • 举报
回复
还有解密是不是把已经加密过的MD5码重新加密一次,就可以解了?
还是有什么别的方法?

MD5算法是不可逆算法,可以暴力解密~~~
具体的你可以参考我的blog文章,我以前写过一个~~~
qq14168 2008-02-26
  • 打赏
  • 举报
回复
不太明白你这个代码的意思!感觉好象根本就对不上呀!
如果想得到返回的话,是不是要自己添加一个函数呢?
还有解密是不是把已经加密过的MD5码重新加密一次,就可以解了?
还是有什么别的方法?
lzpggg 2008-02-26
  • 打赏
  • 举报
回复
对不起,没注意看题目,下面的对你有帮助;
"还有解密是不是把已经加密过的MD5码重新加密一次,就可以解了? ",不行,不可逆,只能把你输入的密码通过生成信的密钥来对比确认是否正确;

//产生新的加密解密密钥
MD5_CTX md5T;
unsigned char digest[16];
CString pwd="my password";//输入的密码;
pwd+="salt";
int len=pwd.GetLength();
unsigned char *newPwd = (unsigned char*)pwd.GetBuffer(len);
pwd.ReleaseBuffer();
md5T.MD5Update (newPwd,len);
md5T.MD5Final (digest);
//转换为16进制存入password字段
for (int i=0; i<16; i++)
sprintf(result+2*i, "%02x", digest[i]);
result[32]=0;
pwd=result;//密码散列最后存在pwd中;
greatws 2008-02-26
  • 打赏
  • 举报
回复

void MD5( unsigned char* buf, int len, unsigned char* digest )
{
MD5_CTX md;
md.MD5Update(buf, len);
md.MD5Final(digest);
}
qq14168 2008-02-25
  • 打赏
  • 举报
回复
还有,顺便告诉我一下,怎么结贴~小弟初来此地,人生地不熟,请多指教了!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧