C语言实现MD5校验码生成

一、MD5算法程序包下载链接

https://download.csdn.net/download/gghhjjddss/87405510

二、小数据量MD5码生成

2-1、输入要校验的数据

const char mini_code[] = {
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
};

2-2、对输入的数据进行校验实现过程

    unsigned char o_md5[16];
    int offset = 0;
    int length;
    int total = sizeof(big_code);
    hash_md5_ctx_t md5;

    /* 数据量小的情况 */
    hash_md5_init(&md5);
    hash_md5_update(&md5,(unsigned char *)mini_code,sizeof(mini_code));
    hash_md5_final(o_md5,&md5);

    printf("mini code:\r\n");
    for(int i = 0; i < 16; i ++) {
        printf("%02X ",o_md5[i]);
    }
    printf("\r\n");

2-3、输出结果

三、大数据量MD5码生成

3-1、输入要校验的数据

const char big_code[] = {
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
};

3-2、对输入的数据进行校验

    /* 数据量大的情况 */
    hash_md5_init(&md5);
    while(total)
    {
        if(total > sizeof(buffer)) {
            length = sizeof(buffer);
        } else {
            length = total;
        }
        memcpy(buffer,big_code,length);
        hash_md5_update(&md5,buffer,length);
        total -= length;
    }
    hash_md5_final(o_md5,&md5);

    printf("big code:\r\n");
    for(int i = 0; i < 16; i ++) {
        printf("%02X ",o_md5[i]);
    }
    printf("\r\n");    return 0;

3-3、输出结果

四、完整的实现例程

/*******************************************************************************
 * FilePath       : \source\main.c
 * Company        : 
 * Author         : 
 * Version        : V1.0.0
 * Date           : 2023-01-31 08:29:43
 * Description    : 
 *******************************************************************************/
#include <stdio.h>
#include <string.h>

#include "hash_md5.h"

const char mini_code[] = {
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
};

const char big_code[] = {
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
    0x00,0x80,0x80,0x80,0x80,0x80,0x98,0xB0,0xE0,0xC0,0x80,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x19,0x0D,0x07,0x03,0x01,0x00,/*"→",0*/
    0x00,0x80,0xC0,0xE0,0xB0,0x98,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x01,0x03,0x07,0x0D,0x19,0x01,0x01,0x01,0x01,0x01,0x00,/*"←",0*/  
};

static unsigned char buffer[128];

/*******************************************************************************
 * Function Name  : main
 * Date           : 2023-01-31 08:31:40
 * Description    : 
 * Input          : 
 * Output         : 
 * Return         : 
*******************************************************************************/
int main(int argv,const char **argc)
{
    unsigned char o_md5[16];
    int offset = 0;
    int length;
    int total = sizeof(big_code);
    hash_md5_ctx_t md5;

    /* 数据量小的情况 */
    hash_md5_init(&md5);
    hash_md5_update(&md5,(unsigned char *)mini_code,sizeof(mini_code));
    hash_md5_final(o_md5,&md5);

    printf("mini code:\r\n");
    for(int i = 0; i < 16; i ++) {
        printf("%02X ",o_md5[i]);
    }
    printf("\r\n");

    /* 数据量大的情况 */
    hash_md5_init(&md5);
    while(total)
    {
        if(total > sizeof(buffer)) {
            length = sizeof(buffer);
        } else {
            length = total;
        }
        memcpy(buffer,big_code,length);
        hash_md5_update(&md5,buffer,length);
        total -= length;
    }
    hash_md5_final(o_md5,&md5);

    printf("big code:\r\n");
    for(int i = 0; i < 16; i ++) {
        printf("%02X ",o_md5[i]);
    }
    printf("\r\n");    return 0;
}

五、例程下载链接

https://download.csdn.net/download/gghhjjddss/87405531

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值