MD5密码哈希算法(c语言实现)

本人为大学生在校生,所写源码有诸多不足,希望各位多多指正。编译器为Dev C++

#include<bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
unsigned int A,B,C,D,CV[4],X[16];
//明文
char M[100000]="abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
//常数数组T
unsigned int T[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,0x699d6122,0xfde5380c,0xa4beea44,0x4bdecfa9,0xf6bb4b60,0xb3bfbc70,
0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,0xf4292244,0x432aff97,0xab9423a7,0xfc93a039,0x655b59c3,0x8f0ccc92,
0xffeff47d,0x85845dd1,0x6fa87e4f,0xfe2ce6e0,0xa3014314,0x4e0811a1,0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391};
//压缩函数每步左循环移位位数
int y[64]={7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,20,6,10,15,21};//移位函数int move(int i,unsigned int x){unsigned int y;y=x<<i;x=y|x>>(32-i);return x;}
//四轮运算的函数
int F(int i)
{unsigned int a;a=B;B=B+move(y[i],T[i-1]+X[i-1]+A+((B&C)|(~B&D)));A=D;C=B;D=C;return 0;}
int G(int i)
{unsigned int a;a=B;B=B+move(y[i],T[i-1]+X[(1+5*i)%16-1]+A+((B&D)|(C&~D)));A=D;C=B;D=C;return 0;
}
int H(int i)
{unsigned int a;a=B;B=B+move(y[i],T[i-1]+X[(5+3*i)%16-1]+A+(B^C^D));A=D;C=B;D=C;return 0;
}
int I(int i)
{unsigned int a;a=B;B=B+move(y[i],T[i-1]+X[7*i%16-1]+A+(C^(B|~D)));A=D;C=B;D=C;return 0;
}
//将字符串转为可处理的32bit字,32bit为四字节由四个字符组成,每个消息分组消耗4*16=64个字符
int code(int n,int k=16)
{for(int i=0;i<k;i++){X[i]=M[4*i+64*n]|(M[4*i+1+64*n]<<8)|(M[4*i+2+64*n]<<16)|(M[4*i+3+64*n]<<24);}return 0;
}
int MD5encry()
{CV[0]=A;CV[1]=B;CV[2]=C;CV[3]=D; int j=1;for(j;j<=16;j++)F(j);for(j;j<=32;j++)G(j);for(j;j<=48;j++)H(j);for(j;j<=64;j++)I(j);A=CV[0]+A;B=CV[1]+B;C=CV[2]+C;D=CV[3]+D;} int main(int argc, char *argv[]) {A=0x67452301;B=0xEFCDAB89;C=0x98BADCFE;D=0x10325476;unsigned long len=strlen(M);int m,n;//判断需要扩展的字符数 ,如果小于448须补齐最后一组,若大于448则多出一组 if(8*len%512<448){n=8*len/512+1;m=(512-(8*len%512))/8;for(int i=0;i<n-1;i++){code(i);for(int j=0;j<16;j++)printf("%08x",X[j]);} int x=len%64;int y=x/4;int z=x%4;code(n-1,y);if(z==1)X[y]=M[64*(n-1)+4*y+1]<<24|0x800000;if(z==2)X[y]=M[64*(n-1)+4*y+1]<<16| M[64*(n-1)+4*y+2]<<24|0x8000;if(z==3)X[y]=M[64*(n-1)+4*y+1]<<8|M[64*(n-1)+4*y+2]<<16|M[64*(n-1)+4*y+3]<<8|0x80;if(z==0)X[y]=0x80000000;for(int i=y+1;i<14;i++)X[i]=0x0;//实现小端存储数据位数 X[14]=(len<<56&0xff000000)|(len<<40&0x00ff0000)|(len<<24&0x0000ff00)|(len<<8&0x000000ff);X[15]=(len>>56&0x000000ff)|(len>>40&0x0000ff00)|(len>>24&0x00ff0000)|(len>>8&0xff000000);for(int j=0;j<16;j++)printf("%08x",X[j]);MD5encry();}else{n=8*len/512+1;m=(512-(8*len%512)+512)/8;for(int i=0;i<n-2;i++){code(i);for(int j=0;j<16;j++)cout<<X[j];MD5encry();} int x=len%64;int y=x/4;int z=x%4;code(n-2,y);if(z==1)X[y]=M[64*(n-1)+4*y+1]<<24|0x800000;if(z==2)X[y]=M[64*(n-1)+4*y+1]<<16| M[64*(n-1)+4*y+2]<<24|0x8000;if(z==3)X[y]=M[64*(n-1)+4*y+1]<<8|M[64*(n-1)+4*y+2]<<16|M[64*(n-1)+4*y+3]<<8|0x80;if(z==0)X[y]=0x80000000;for(int i=y+1;i<16;i++)X[i]=0x0;for(int j=0;j<16;j++)printf("%08x",X[j]);MD5encry();for(int i=0;i<14;i++)X[i]=0x0;X[14]=(len<<56&0xff000000)|(len<<40&0x00ff0000)|(len<<24&0x0000ff00)|(len<<8&0x000000ff);X[15]=(len>>56&0x000000ff)|(len>>40&0x0000ff00)|(len>>24&0x00ff0000)|(len>>8&0xff000000);for(int j=0;j<16;j++)printf("%08x",X[j]);MD5encry();}cout<<endl;printf("%08x%08x%08x%08x",A,B,C,D);return 0;
}

MD5密码哈希算法(c语言实现)相关推荐

  1. 区块链中哈希算法c语言代码,解析区块链中的核心技术哈希(Hash)算法

    原标题:解析区块链中的核心技术哈希(Hash)算法 作者:崔利民 区块链是分布式数据存储.点对点传输.共识机制.加密算法等计算机技术的新型应用模式.区块链的关键技术组成主要为:P2P网络协议.共识机制 ...

  2. 用SHA哈希算法加密密码文件

    在Linux的发行版中,用户的登录密码通常是用MD5算法散列后存储于/etc/shadows文件中的.这种方法的安全性因MD5容易碰撞的特性而相对较弱,虽然这并不意味着MD5对于密码散列算法不可靠.但 ...

  3. 教你如何轻松解密Md5密码

    Md5密文破解(解密)可以说是网络***中的一个必不可少的环节,是***工具中的一个重要"辅助工具".md5解密主要用于网络***,在对网站等进行***过程,有可能获得管理员或者其 ...

  4. data_structure_and_algorithm -- 哈希算法(上):如何防止数据库中的用户被脱库?

    最近写的文章有点杂,看上去东一点西一点,最后会在博客目录中捋顺的. 今天主要看一下哈希算法的应用,主要参考:前谷歌工程师王争的课程,感兴趣可以通过下面方式微信扫码购买: 还记得 2011 年 CSDN ...

  5. 哈希算法(一)---如何防止数据库中的用户信息被脱库?

    目录 什么是哈希算法? 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 解答开篇 内容小结 课后思考 还记得 2011 年 CSDN 的"脱库"事件吗?当时 ...

  6. 常见哈希算法以及Hmac算法,BouncyCastle总结

    常见哈希算法总结 (1)什么是哈希算法? 哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输出数据进行计算,得到一个固定长度的输出摘要.哈希算法的目的;为了验证原始数据是否被篡 ...

  7. 算法学习笔记13:哈希算法

    哈希算法(上):如何防止数据库中的用户信息被脱库 什么是哈希算法 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 解答开篇 哈希算法(下):哈希算法在分布式系统中有哪些应用 应 ...

  8. VBA和VBScript的SHA2加密哈希算法

    介绍 安全哈希算法2是由美国国家安全局(NSA)设计并由美国国家标准技术研究院(NIST)作为政府标准发布的一系列密码哈希算法. NIST目前正在进行一项竞赛,目的是为SHA-3寻找新的算法系列. 这 ...

  9. 一致性哈希算法 mysql_一致性哈希算法 CARP 原理解析, 附 Golang 实现

    一致性哈希算法 CARP 原理解析, 附 Golang 实现 在后端服务开发的过程中, 遇到了这样一个问题: 需要在 mysql 前面部署 redis 做一层缓存, 要求 redis 是集群部署, 并 ...

最新文章

  1. HTML表格颜色按条件填充,Excel单元格能否根据条件填充颜色?
  2. android 4.4 禁止下拉,Android开发中禁止下拉式的实现技巧
  3. Getting Started with CocoaPods
  4. 3千字带你搞懂XXL-JOB任务调度平台
  5. python整体设计目标_Python 入門語法和類型(学习)
  6. 第 15 章 垃圾回收相关算法
  7. 多物理场面向对象模拟环境MOOSE学习手册
  8. android 自定义控件之下拉刷新源码详解
  9. 如何自主搭建信息管理系统
  10. IT行业技术部门人员架构设计
  11. 绿城中国的数字化转型之大中台实践
  12. WinZip for Mac注册版
  13. 卡方检验python程序_卡方检验及其python实现
  14. F - 悼念512汶川大地震遇难同胞
  15. miktex报错:the remote package repository is outdated
  16. Ctrl + Alt + Left/Right键失效以及Ctrl + Space键被占用解决
  17. Windows11 微软拼音注册表方式添加小鹤双拼
  18. 二手苹果8多少钱_苹果期货一手多少钱
  19. matlab中根据表格数据画图,excel 表格数据画图-如何利用matlab根据excel表格里面的数据画图...
  20. SQLMAP-POST注入

热门文章

  1. 《图解密码技术》笔记13:PGP-密码技术的完美组合
  2. less/sass中属性选择器使用方法
  3. 选择DC-DC开关电源控制器的实战过程
  4. 郭敬明道歉承认作品抄袭:如何维护互联网作品版权信息
  5. JS配置KaTeX渲染LaTeX公式
  6. 最新车载以太网解决方案
  7. 电脑显示器突然变了颜色
  8. 【mysql】mysql数据备份与恢复
  9. 机器学习之随机森林RandomForestRegressor
  10. linux图片格式转换工具,在Linux系统上安装和使用Converseen批量图像转换器的方法...