MD5密码 解密是什么意思(c语言md5解密)

2023-03-06 6:18:48 密码用途 思思

md5密码的意思就是通过md5加密方式生成的密码,解密就是将已经加密的密码通过一些处理,将密码还原成原来的模样。

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。

用c语言实现python的md5功能?

题中所示代码中,python实现了计算空字符串的MD5值,并对MD5的值的十六进制的字符串所表示的字节进行BASE64处理。

不像Python内部有实现md5功能,根据ANSI C标准,C语言的标准库里是没有md5功能的;

但是RFC1231规定了MD5功能的C实现并提供了附件,可以直接用,也可以直接获取现成的实现,在编译链接时指定正确的.h头文件和.lib静态链接库文件;

这里我采取前者的做法(电脑上没有装VC,有VC就简单很多,使用的是minGW)大概六七百行代码左右。

然后这里展示不完,给个实现效果图

这是我整理的实现代码,其中BASE64部分使用了github上littlestar的b64.c,然后MD5计算部分直接参考了RFC1231标准的附录。RFC1231文件有计算方法

BASE64的编码原理

请教MD5算法 用C语言实现

#include stdio.h

#include stdlib.h

#include string.h

#if defined(__APPLE__)

#  define COMMON_DIGEST_FOR_OPENSSL

#  include CommonCrypto/CommonDigest.h

#  define SHA1 CC_SHA1

#else

#  include openssl/md5.h

#endif

// 这是我自己写的函数,用于计算MD5

// 参数 str:要转换的字符串

// 参数 lengthL: 字符串的长度 可以用 strlen(str) 直接获取参数str的长度

// 返回值:MD5字符串

char *str2md5(const char * str, int length) {

    int n;

    MD5_CTX c;

    unsigned char digest[16];

    char *out = (char*)malloc(33);

    MD5_Init(c);

    while (length  0) {

        if (length  512) {

            MD5_Update(c, str, 512);

        } else {

            MD5_Update(c, str, length);

        }

        length -= 512;

        str += 512;

    }

    MD5_Final(digest, c);

    for (n = 0; n  16; ++n) {

        snprintf((out[n*2]), 16*2, "%02x", (unsigned int)digest[n]);

    }

    return out;

}

    int main(int argc, char **argv) {

        char *output = str2md5("hello", strlen("hello"));

        

        printf("%s\n", output);

        // 上面会输出 hello的MD5字符串:

        // 5d41402abc4b2a76b9719d911017c592

        free(output);

        return 0;

    }

如何在Linux下用C语言实现MD5/DES解密

相关库函数如下:

#include openssl/md5.h

unsigned char *MD5(const unsigned char *d, unsigned long n,unsigned char *md);

int MD5_Init(MD5_CTX *c);

int MD5_Update(MD5_CTX *c, const void *data,unsigned long len);

int MD5_Final(unsigned char *md, MD5_CTX *c);