c 和java通用md5_与Java的MD5算法一致的C/C++的MD5算法

本文提供了C/C++实现的MD5算法,确保与Java的MD5算法结果一致,用于文件校验。代码包括MD5加密函数、哈希加密函数和DES加密解密函数。详细展示了MD5的初始化、更新、结束操作,以及关键的FF、GG、HH、II变换过程。
摘要由CSDN通过智能技术生成

网上C/C++的MD5算法很多,但找了好久,也没找到合适的能与JAVA的MD5结果一样的算法。最后还是把以前项目里的一个算法改了一下,实现了和Java传输文件时,校验文件的功能。Java的MD5算法比较统一,而C++的算法则很多版本,只能C++往Java上靠拢。

md5.h

#ifndef _DMSUTIL_H

#define _DMSUTIL_H

#ifdef __cplusplus

extern "C" {

#endif

/*------------------------------------------------------------------------.

| md5 encrypt function

.------------------------------------------------------------------------*/

void EncryptMD5(unsigned char *output, unsigned char *input);

void EncryptMD5str(char *output, unsigned char *input, int len);

/*------------------------------------------------------------------------.

| hash encrypt function

.------------------------------------------------------------------------*/

void EncryptHash(char *crypt, char *source);

/*------------------------------------------------------------------------.

| DES encrypt and decrypt function

.------------------------------------------------------------------------*/

void EncryptDes(unsigned char *source, unsigned char *encrypt);

void DecryptDes(unsigned char *encrypt, unsigned char *source);

#ifdef __cplusplus

}

#endif

#endif

对应的md5.cpp文件源码如下:

//http:vcsky.net by havenzhao

#include

#include

#include "dms5.h"

/*MD5 context*/

typedef struct MD5_CTX_S{

unsigned int state[4];

unsigned int count[2];

char buffer[64];

}MD5_CTX;

static unsigned char digest[16];

/*MD5 initialization*/

static void MD5Init(MD5_CTX *);

/*MD5 block update operation*/

static void MD5Update(MD5_CTX *, unsigned char *, unsigned int);

/*Ends an MD5 message-digest operation*/

static void MD5Final(unsigned char [16], MD5_CTX *);

/*MD5 padding*/

static void   __md5_Pad (MD5_CTX *);

/*MD5 basic transformation*/

static void   __md5_Transform (unsigned int [4], unsigned char [64]);

#ifdef i386

#define __md5_Encode memcpy

#define __md5_Decode memcpy

#else /* i386 */

/*

* __md5_Encodes input (u_int32_t) into output (unsigned char). Assumes len is

* a multiple of 4.

*/

static void

__md5_Encode (unsigned char *output, unsigned int *input, unsigned int len)

{

unsigned int i, j;

for (i = 0, j = 0; j < len; i++, j += 4) {

output[j] = (unsigned char)(input[i] & 0xff);

output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);

output[j+2] = (unsigned char)((input[i]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值