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)

大家都在看

  • 如何制作超链接,制作超链接的流程及费用

    接下来,我们来讲讲公众号怎么做超链接? 之前没有接触过互联网或者说是你是刚入门的朋友,可能还不知道什么叫超链接。之前如果有做超链接的朋友,那么恭喜你,这篇文章可能就不用看了。经常会…

    2022年5月10日 专栏投稿
  • C语言日历代码(日历代码实现)

    前天我们通过一段代码展示了如何通过Python的Pandas包生成一个日历表,如果各位感兴趣可以参考:通过Pandas生成日历表; 不得不说在 DB Engine(https://…

    2022年6月10日 专栏投稿
  • 避孕怎么用(如何避孕最安全不伤身体)

    文|好孕姐 闺蜜生完二胎的时候,她妈妈就建议她“上环”,也就是在宫腔内放置节育环,达到避孕的效果。于是,闺蜜就上网查查带节育环好不好。闺蜜一查吓坏了。她看见有新闻说“某女士带节育环…

    2022年4月25日
  • 韩国为什么叫棒子(韩国人叫棒子是什么意思)

    就跟印度人在中国被称为“阿三”一样,韩国人也有一个很别致的名字——“棒子”。仅从字面上也能够感觉到,“棒子”,似乎不是什么好词儿。的确如此,我们一般称韩国人为棒子,带有蔑视或贬义。…

    2022年5月11日 专栏投稿
  • 老是有痰怎么回事(女性喉咙总是有痰)

    在门诊中,经常遇到很多患者有一个共同症状,那就是觉得嗓子里有点痰,但是使劲咳嗽半天,还是咳不出来,依然觉得嗓子里有异物感。 这个症状算不上大问题,但是,的确挺令人困扰,因为这个异物…

    2022年5月6日 专栏投稿
  • 怎么做臭豆腐(不辣的韩式拌饭)

    大家好,这里是【刘一手美食】,老刘,每天分享一道好吃又实用的家常菜 1、臭豆腐,中国传统特色小吃,在各地的制作方式、食用方法均有相当大的差异,有北方和南方的不同类型,臭豆腐在南方又…

    2022年4月5日 专栏投稿
  • 咽的咽怎么(咽d)

    差cī(参差)chā(差别) chà(相差)chāi(出差) 和hé(和气) hè(附和) huó(和面) hú(和牌) 着zhāo(着数)zháo(着凉) zhe(为着)zhuó…

    2022年4月19日
  • 网卡怎么看(电脑无线网卡多少钱一个)

    市面上无线网卡品类众多,鱼龙混杂,很多新手朋友不知道如何选择,今天就由COMFAST小编跟大家一起聊聊无线网卡选购注意事项吧! 注意结合自己的使用场景选择 ①首先确定自己的主路由是…

    2022年4月15日 专栏投稿
  • 倩碧多少钱(倩碧黄油专柜卖多少钱)

    OnlyLady女人志2015-03-02 15:00:00 首先普及一下官方价格(同时亦可作为专柜价格)。倩碧黄油常见的规格就是125ML,有油黄油又被成为:倩碧卓越润肤乳(天才…

    2022年5月23日
  • 舌苔白厚是怎么回事(舌苔厚白会引起牙疼吗)

    平时需要多留意自己的身体变化,因为在身体出现某些健康问题的时候某些器官或者部位会有症状。部分人在观察自己舌头的时候发现自己的舌苔又厚又白,如果有这种情况发生,应该了解原因,通过合理…

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