c 语言实现md5 算法,MD5 算法的程序设计和实现

本文详细介绍了MD5算法的原理,包括其数据填充方式、初始值设定和四轮循环运算过程。通过C语言实现MD5算法,解析了算法中的关键函数和步骤,并提供了代码示例,最终验证了算法的正确性。
摘要由CSDN通过智能技术生成

MD5 算法概述

MD5,全名Message Digest Algorithm 5,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5是一种信息摘要算法,主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要,压缩+加密+hash算法的结合体,是绝对不可逆的。MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来。

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。MD5算法的过程分为四步:数据填充,设置初始值(标准向量),四轮循环运算,拼接结果。

结构和模块

2d2debf78f69

image

数据结构

采用32位无符号整数作为存储单元,常量的整数部分是正弦(弧度)* 2 ^ 32;r指定每个轮班的数量;定义Left Rotatate 函数为 (x) << (c) | (x) >> (32 - (c))。

// Constants are the integer part of the sines of integers (in radians) * 2^32.

const uint32_t k[64] = {

0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee ,

0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501 ,

0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be ,

0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821 ,

0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa ,

0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8 ,

0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed ,

0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a ,

0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c ,

0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70 ,

0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05 ,

0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665 ,

0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039 ,

0x655b59c3, 0x8f0c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值