如何用MD5加密一个文件(在bcb5通过最好运行得到)?

limlzm 2003-08-21 06:15:14
我找了一些MD5原文件 global.h md5.h md5c.c 可加入工程后定义了个

static void MDFile (char *filename)
{
FILE *file;
MD_CTX context;
int len;
unsigned char buffer[1024], digest[16];

if ((file = fopen (filename, "rb")) == NULL)
printf ("%s can't be opened\n", filename);

else {
MDInit (&context);
while (len = fread (buffer, 1, 1024, file))
MDUpdate (&context, buffer, len);
MDFinal (digest, &context);

fclose (file);

}
}
调试成功
但我加了个button后,却列出
POINTER(65): MDPrint (digest);
[C++ Warning] Unit1.cpp(63): W8060 Possibly incorrect assignment
[Linker Error] Unresolved external 'MD5Init(MD5_CTX *)' referenced from C:\LIM\MD5TEST3\UNIT1.OBJ
[Linker Error] Unresolved external 'MD5Update(MD5_CTX *, unsigned char *, unsigned int)' referenced from C:\LIM\MD5TEST3\UNIT1.OBJ
[Linker Error] Unresolved external 'MD5Final(unsigned char *, MD5_CTX *)' referenced from C:\LIM\MD5TEST3\UNIT1.OBJ

如何解决?或者有谁成功式过的把过程说给我听,谢谢。
...全文
47 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
leekeygy 2003-11-11
  • 打赏
  • 举报
回复
只要将md5c.c 改名为md5.cpp 就可以编译了
  • 打赏
  • 举报
回复
兄弟,我的C语言没过关,那些代码开始还看得懂,可是越改越出错......
能把你的类给一份给我吗?谢谢了。
limlzm 2003-08-27
  • 打赏
  • 举报
回复
结贴:我已经解决了这个问题,我是把程序改成类的形式,只有两个文件,一个cpp 一个h,很方便,谢谢各位帮助,如果你们需要源文件的话可以联系我。
limlzm 2003-08-22
  • 打赏
  • 举报
回复
我改过了,还有什么要注意的?
netsys2 2003-08-22
  • 打赏
  • 举报
回复
这些老格式的东西得转换:

void MD5Init (context)
MD5_CTX *context; /* context */
{

--》

void MD5Init (MD5_CTX * context);

limlzm 2003-08-22
  • 打赏
  • 举报
回复
这个函数应该就是解决的方法吧?但就是link不了,我想是我的bcb基础不行,而不是思路不对。
static void MDFile (char *filename)
{
FILE *file;
MD_CTX context;
int len;
unsigned char buffer[1024], digest[16];

if ((file = fopen (filename, "rb")) == NULL)
printf ("%s can't be opened\n", filename);

else {
MDInit (&context);
while (len = fread (buffer, 1, 1024, file))
MDUpdate (&context, buffer, len);
MDFinal (digest, &context);

fclose (file);

}
}
netsys2 2003-08-22
  • 打赏
  • 举报
回复
MD5算法:

该算法接收一个任意长度的报文作为输入,产生一个128bit的报文摘要作为输出

你想把这个项目做好,得去补一点基础知识,

推荐两本书:
《应用密码学》-机工版
《密码编码学与网络安全:原理与实践》-电工版
limlzm 2003-08-22
  • 打赏
  • 举报
回复
我就是想用MD5做文件完整性的签名。我的md5.c比你的还完整啊,编译成功,那怎样做呢?能帮忙解决吗?
netsys2 2003-08-21
  • 打赏
  • 举报
回复
MD5是做HASH的啊,加密文件一般用DES。

MD5可用做文件完整性的签名。

你的MD5。C不全吧。

void MD5Init (context)
MD5_CTX *context; /* context */
{
context->count[0] = context->count[1] = 0;

/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
void MD5Update (context, input, inputLen)
MD5_CTX *context; /* context */
unsigned char *input; /* input block */
unsigned int inputLen; /* length of input block */
{
unsigned int i, index, partLen;

/* Compute number of bytes mod 64 */
index = (unsigned int)((context->count[0] >> 3) & 0x3F);

/* Update number of bits */
if ((context->count[0] += ((UINT4)inputLen << 3))
< ((UINT4)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4)inputLen >> 29);

partLen = 64 - index;

/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
MD5_memcpy
((POINTER)&context->buffer[index], (POINTER)input, partLen);
MD5Transform (context->state, context->buffer);

for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform (context->state, &input[i]);

index = 0;
}
else
i = 0;

/* Buffer remaining input */
MD5_memcpy
((POINTER)&context->buffer[index], (POINTER)&input[i],
inputLen-i);
}

/* MD5 finalization. Ends an MD5 message-digest operation, writing the
the message digest and zeroizing the context.
*/
void MD5Final (digest, context)
unsigned char digest[16]; /* message digest */
MD5_CTX *context; /* context */
{
unsigned char bits[8];
unsigned int index, padLen;

/* Save number of bits */
Encode (bits, context->count, 8);

/* Pad out to 56 mod 64.
*/
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update (context, PADDING, padLen);

/* Append length (before padding) */
MD5Update (context, bits, 8);

/* Store state in digest */
Encode (digest, context->state, 16);

/* Zeroize sensitive information.
*/
MD5_memset ((POINTER)context, 0, sizeof (*context));
}


13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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