MD5加密算法C语言实现

#include<math.h>
#include<string.h>
#include<malloc.h>
#include<stdio.h>
#include<assert.h>
#define BLOCK_LEN 64
#define MAX_BLOCKS 9
#define MESSAGE_LEN (BLOCK_LEN*(MAX_BLOCKS-1))
#define RESULT_LEN 33
//MD5算法的上下文,保存一些状态,中间数据,结果
typedef struct md5_data {	
	char *Ms[MAX_BLOCKS];//保存块指针
	int nblocks;//保存块数
	long long len;//处理的数据的长度
	long long bits;//处理的数据的位数
	int H[4];/* 128-bit algorithm internal hashing state */	
	char *str;//待加密的字符串指针
	char *result;//字符串结果指针
} md5_data;
typedef struct Encoder_data {
	char message[MESSAGE_LEN];//待加密的字符串
	char result[RESULT_LEN];//字符串结果指
}Encoder_data;

static inline int S(int x, int s) { //因为存储字符串用的是int类型,所以循环移位要考虑符号的问题
	int temp1 = x << s;
	int temp2 = x >> (32 - s);
	int temp3 = 0;
	for(int i = 0; i<s; i++) {
		temp3 += temp2 & (1<<i);
	}
	return temp1 | temp3;
}

static inline int F1(int x ,int y, int z) {
	return (x & y) | ((~x) & z);
}
static inline int F2(int x, int y, int z) {
	return (x & z) | (y & (~z));
}
static inline int F3(int x, int y, int z) {
	return x ^ y ^ z;
}
static inline int F4(int x, int y, int z) {
	return y ^ (x | (~z));
}
static inline int F(int t,int x, int y, int z) {
	switch(t/16){
		case 0:// 0 <= t< 16
			return F1(x , y, z);
		case 1:// 16 <= t< 32
			return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值