我编译了.so库并将其复制到我的新项目中。我还从源文件夹中复制了.h文件。
现在我尝试使用它。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <iostream>
#include "md5.h"
using namespace std;
int main (int argc, char *argv[]) {
md5_init();
md5_append();
md5_finish();
return 0;
}
在输出中我收到一个错误:函数的参数太少«void md5_init(md5_state_t *)»
和.h文件:
typedef unsigned char md5_byte_t; /* 8-bit byte */
typedef unsigned int md5_word_t; /* 32-bit word */
/* Define the state of the MD5 Algorithm. */
typedef struct md5_state_s {
md5_word_t count[2]; /* message length in bits, lsw first */
md5_word_t abcd[4]; /* digest buffer */
md5_byte_t buf[64]; /* accumulate block */
} md5_state_t;
#ifdef __cplusplus
extern "C"
{
#endif
/* Initialize the algorithm. */
#ifdef WIN32
_declspec(dllexport)
#endif
void md5_init(md5_state_t *pms);
/* Append a string to the message. */
#ifdef WIN32
_declspec(dllexport)
#endif
void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
/* Finish the message and return the digest. */
#ifdef WIN32
_declspec(dllexport)
#endif
void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
#ifdef __cplusplus
} /* end extern "C" */
#endif
图书馆已经获得了这个site。请参阅C ++实现。
我误解了什么?
答案 0 :(得分:1)
您正在调用的MD5函数都需要(至少)一个能够存储“消息摘要流”的当前状态的结构(您要为其生成摘要的字节序列)。
该结构允许您在多次调用md5_append()
之间存储状态以及并行运行多个流,因为给定流的状态完全存储在结构中
要做到这一点,你需要像:
#define HELLO "Hello"
#define SENDR " from Pax"
int main (int argc, char *argv[]) {
md5_state_t pms;
md5_byte_t digest[16];
md5_init (&pms);
md5_append (&pms, (const md5_byte_t *)HELLO, strlen (HELLO));
md5_append (&pms, (const md5_byte_t *)SENDR, strlen (SENDR));
md5_finish (&pms, digest);
// digest now holds the message digest for the given string.
return 0;
}