md5加密C语言实现

md5加密,这里的程序只是简单实现了md5加密的效果,适用于字符串,md5加密的主要步骤为:1.md5结构体定义,即md5头文件。#ifndef MD5_FORENCRPTY_H#define MD5_FORENCRPTY_H/*this is only 32bit*/typedef unsigned int md5_int;struct MD5_struct{ md
摘要由CSDN通过智能技术生成
md5加密,这里的程序只是简单实现了md5加密的效果,适用于字符串,
md5加密的主要步骤为:

1.md5结构体定义,即md5头文件。

#ifndef MD5_FORENCRPTY_H
#define MD5_FORENCRPTY_H
/*this is only 32bit*/
typedef unsigned int md5_int;
struct MD5_struct
{
    md5_int A;
    md5_int B;
    md5_int C;
    md5_int D;
    md5_int lenbuf;    
    char buffer[128];
};
void md5_init(struct MD5_struct *ctx,char * buffer);
void md5_process(struct MD5_struct * ctx);
char * md5_fini(struct MD5_struct *ctx,void *rebuf);
void md5_buffer_full(struct MD5_struct * ctx);
void md5_print(struct MD5_struct * ctx);
#endif

2.信息初始化。

md5以512位分组来处理输入文本,每一分组又划分为16个32位子分组。
首先填充消息使其长度恰好为一个比512位的倍数仅小64位的数。填充方法是附一个1在消息后面,后接所要求的多个0,然后在其后附上64位的消息(信息)长度。

需要用于用于初始化md5结构体的四个32位变量为:

ctx->A=0x67452301;
ctx->B=0xefcdab89;
ctx->C=0x98badcfe;
ctx->D=0x10325476;
3.定义循环的线性函数。

#define F(x,y,z) (((x)&(y))|((~x)&(z)))
#define G(x,y,z) (((x)&(z))|((y)&(~z)))
#define H(x,y,z) ((x)^(y)^(z))
#define I(x,y,z) ((y)^((x)|(~z)))
//数据移位处理
#define ROT(x,s) (x=(x<<s)|(x>>(32-s)))
#define FF(a,b,c,d,j,s,T) {a=a+(F(b,c,d)+M[j]+T);ROT(a,s);a=a+b;}
#define GG(a,b,c,d,j,s,T) {a=a+(G(b,c,d)+M[j]+T);ROT(a,s);a=a+b;}
#define HH(a,b,c,d,j,s,T) {a=a+(H(b,c,d)+M[j]+T);ROT(a,s);a=a+b;}
#define II(a,b,c,d,j,s,T) {a=a+(I(b
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值