md5在线解密工具(免费md5解密网站)

本文详细讲解视频如下:

《C语言实现MD5算法》

一、摘要算法

摘要算法又称哈希算法。

它表示输入任意长度的数据,输出固定长度的数据,它的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密。

目前可以被解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。

消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当巨大,所以以前的这种算法通常只用于数据量有限的情况下的加密。

消息摘要算法分为三类:

  • MD(Message Digest):消息摘要
  • SHA(Secure Hash Algorithm):安全散列
  • MAC(Message Authentication Code):消息认证码

这三类算法的主要作用:验证数据的完整性

二、MD5简介

MD5即Message-Digest Algorithm 5(信息-摘要算法)。

属于摘要算法,是一个不可逆过程,就是无论多大数据,经过算法运算后都是生成固定长度的数据,结果使用16进制进行显示的128bit的二进制串。通常表示为32个十六进制数连成的字符串。

MD5有什么用?

用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。更多用在文档校验上,用来生成密钥检测文档是否被篡改。

三、在线MD5加密

有很多在线进行MD5加密的网站,如下:

举例: 给字符串 12334567 加密成。

md5在线解密工具(免费md5解密网站)

如图结果为:

32135A337F8DC8E2BB9A9B80D86BDFD0

四、C语言实现MD5算法

源文件如下:md5.h

#ifndef MD5_H
#define MD5_H
 
typedef struct
{
    unsigned int count[2];
    unsigned int state[4];
    unsigned char buffer[64];   
}MD5_CTX;
 
                         
#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 ROTATE_LEFT(x,n) ((x > (32-n)))
#define FF(a,b,c,d,x,s,ac) 
          { 
          a += F(b,c,d) + x + ac; 
          a = ROTATE_LEFT(a,s); 
          a += b; 
          }
#define GG(a,b,c,d,x,s,ac) 
          { 
          a += G(b,c,d) + x + ac; 
          a = ROTATE_LEFT(a,s); 
          a += b; 
          }
#define HH(a,b,c,d,x,s,ac) 
          { 
          a += H(b,c,d) + x + ac; 
          a = ROTATE_LEFT(a,s); 
          a += b; 
          }
#define II(a,b,c,d,x,s,ac) 
          { 
          a += I(b,c,d) + x + ac; 
          a = ROTATE_LEFT(a,s); 
          a += b; 
          }                                            
void MD5Init(MD5_CTX *context);
void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen);
void MD5Final(MD5_CTX *context,unsigned char digest[16]);
void MD5Transform(unsigned int state[4],unsigned char block[64]);
void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len);
void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len);
 
#endif

md5.c

本文转载自:https://www.gylmap.com

#include 
#include "md5.h"
 
unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
                         
void MD5Init(MD5_CTX *context)
{
     context->count[0] = 0;
     context->count[1] = 0;
     context->state[0] = 0x67452301;
     context->state[1] = 0xEFCDAB89;
     context->state[2] = 0x98BADCFE;
     context->state[3] = 0x10325476;
}
void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen)
{
    unsigned int i = 0,index = 0,partlen = 0;
    index = (context->count[0] >> 3) & 0x3F;
    partlen = 64 - index;
    context->count[0] += inputlen count[0] count[1]++;
    context->count[1] += inputlen >> 29;
    
    if(inputlen >= partlen)
    {
       memcpy(&context->buffer[index],input,partlen);
       MD5Transform(context->state,context->buffer);
       for(i = partlen;i+64 state,&input[i]);
       index = 0;        
    }  
    else
    {
        i = 0;
    }
    memcpy(&context->buffer[index],&input[i],inputlen-i);
}
void MD5Final(MD5_CTX *context,unsigned char digest[16])
{
    unsigned int index = 0,padlen = 0;
    unsigned char bits[8];
    index = (context->count[0] >> 3) & 0x3F;
    padlen = (index count,8);
    MD5Update(context,PADDING,padlen);
    MD5Update(context,bits,8);
    MD5Encode(digest,context->state,16);
}
void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len)
{
    unsigned int i = 0,j = 0;
    while(j > 8) & 0xFF;
         output[j+2] = (input[i] >> 16) & 0xFF;
         output[j+3] = (input[i] >> 24) & 0xFF;
         i++;
         j+=4;
    }
}
void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len)
{
     unsigned int i = 0,j = 0;
     while(j 

五、MD5加密实例

MD5加密步骤如下:

  1. 定义
MD5_CTX md5c; 
  1. 初始化
/********************************************************
* 名    称: MD5Init()
* 功    能: 初始化MD5结构体
* 入口参数: 
   context:要初始化的MD5结构体 
* 出口参数: 无
*********************************************************/
MD5Init(MD5_CTX *context);
  1. MD5值计算

实现MD5值的计算及结构体的更新:


/*********************************************************
* 名    称: MD5Update()
* 功    能: 将要加密的信息传递给初始化过的MD5结构体,无返回值
* 入口参数: 
   context:初始化过了的MD5结构体 
    input:需要加密的信息,可以任意长度
    inputLen:指定input的长度
* 出口参数: 无
*********************************************************/
MD5Update(MD5_CTX *context,(unsigned char *)input,inputLen); 
  1. 输出转换
/*********************************************************
* 名    称: MD5Update()
* 功    能: 将加密结果存储到,无返回值
* 入口参数: 
   context:初始化过了的MD5结构体 
    digest :加密过的结果
* 出口参数: 无
*********************************************************/
MD5Final(MD5_CTX *context,unsigned char digest[16]);
  1. 格式整理

转换成32位的16进制字符串。

实例1 字符串加密

对字符串进行加密:

  1 #include 
  2 #include 
  3 #include "md5.h"
  4 #include 
  5 #include 
  6 #include 
  7 #include 
  8 
  9 void main( void ) 
 10 { 
 11     int read_len;
 12     int i ;
 13     char temp[8]={0};
 14     unsigned char digest[16]; //存放结果 
 15     char hexbuf[128]="12334567";
 16     unsigned char decrypt[16]={0};  
 17     unsigned char decrypt32[64]={0};    
 18 
 19     MD5_CTX md5c; 
 20 
 21     MD5Init(&md5c); //初始化
 22     read_len = strlen(hexbuf);
 23     MD5Update(&md5c,(unsigned char *)hexbuf,read_len);  
 24 
 25     MD5Final(&md5c,decrypt); 
 26     strcpy((char *)decrypt32,"");
 27 
 28     for(i=0;i

执行结果如下:

md5在线解密工具(免费md5解密网站)

本例对字符串12334567进行加密,结果和在线加密结果一致。

实例2 文件加密

对文件进行加密

#include 
#include 
#include "md5.h"
#include 
#include 
#include 
#include 

#define FORWORD_FW "123.c"

int calc_md5(char*filename,char*dest)
{
 int i;
 int filelen = 0;
 int read_len;
 char temp[8]={0}; 
 char hexbuf[128]={0};
 unsigned char decrypt[16]={0};  
 unsigned char decrypt32[64]={0};
 MD5_CTX md5;
 char fw_path[128];

 int fdf;
 
 fdf = open(filename,O_RDWR);
 if(fdf

运行结果:

md5在线解密工具(免费md5解密网站)

在线验证结果对比:

md5在线解密工具(免费md5解密网站)

秒鲨号所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈!本站将在三个工作日内改正。
(0)

大家都在看

  • 远程控制开机(电脑远程开机方式)

    如果你在网上搜的话,会发现让电脑远程开机的办法有很多种,但是简单好用的不多,要不就是这儿麻烦,要么就是那儿不合适,用到了什么树莓派、vps、继电器等等,本D丝表示玩不来这些高端玩意…

    2022年6月28日 专栏投稿
  • 酒店行业软件(酒店软件排行榜前十)

    2022的开年突变,对酒店行业来讲,无疑是天降横祸。覆巢之下,焉有完卵,对酒店管理系统企业来说,则是增量市场的红利几乎消失,所有品牌都得在存量市场里搏杀,生存和创新,是2022年的…

    2022年3月14日
  • 什么叫营销策划方案(附:成功案例)

    市场营销策略,指某组织为满足目标客户群体而从事的商业活动中采取的计策和谋略,或者是泛指可实现目标的方案及应对战术需求的行动方针、执行方法。而在市场中则特指组织以顾客需求为准,有计划…

    2022年5月6日
  • 多少钱创业(我想创业没钱没经验)

    创业多年,我一直都是在劝很多人不要创业,尤其是我在一篇文章中说道,不要在没有钱的时候创业,但后台收到一些读者的私信说自己没有资金和资源,但是对某某项目有想法,我都一一回复了;其实大…

    2022年5月27日 专栏投稿
  • 三文鱼头的做法(香辣三文鱼头的做法)

    材料:三文鱼头,姜丝,洋葱,尖椒,生抽,蠔油,料酒,醋,干辣椒(不吃辣的可以不放尖椒和干辣椒) 步骤: 1.三文鱼头洗干净,用适量盐、生抽、料酒、姜丝,腌20分钟。 2.把三文鱼头…

    2022年6月23日
  • 扇贝怎么做(扇贝的最正宗做法)

    大家好,我是傻姐美食,生活中唯有美食和美景不可辜负。春天是海鲜最肥美的季节,像螃蟹、皮皮虾、海虹、扇贝等等,身为海边人又可以大饱口福了,吃海鲜既方便又实惠。今天扇贝15元2斤,买了…

    2022年4月17日 专栏投稿
  • c1照多少钱(双城考驾照c1多少钱)

    早在之前,交通运输部就发布了《机动车驾驶培训先学后付、计时收费模式服务合同》,这标志着计时收费模式试点的开启。随后各地陆续进入改革节奏,驾考迎来了很多新变化。 一、驾校系统升级改造…

    2022年5月28日
  • 翁恺c语言程序设计入门(浙大翁恺老师c语言公开课)

    学习平台:中国MOOC在线学习平台 视频课程:浙江大学翁恺的《程序设计入门——C语言》 自选的辅助教材:谭浩强的《C程序设计》第三版 本笔记对应课程第二周中变量的扩展知识 第二周的…

    2022年6月2日
  • 配置低的电脑单机游戏推荐(最热门的10款低配置游戏)

    对于一些老玩家来说,手中的旧电脑已经越来越差,然而单机游戏的发展速度越来越快,同时,当前这些游戏对电脑的配置也是越来越高,手中的电脑已经跟不上形势了,这让很多条件不允许的玩家失望,…

    2022年5月19日 专栏投稿
  • 送女朋友礼物排行榜(送女朋友手工礼物排行榜)

    1、玫瑰花巧克力: 玫瑰和巧克力几乎成了爱情的代名词。 2、照片定制的水晶: 女生都喜欢干净漂亮的东西,水晶晶莹剔透亘古不变,代表纯洁和永恒,象征爱情地久天长。 3、化妆品: 化妆…

    2022年6月4日
品牌推广 在线咨询
返回顶部