Linux MD5 programming in C Language

Linux MD5 programming in C Language

MD5(Message Digest, Unoffical Homepage,  Wikipedia, rfc1321) 是 Ronald L. Rivest 教授发明的不可逆加密算法,广泛应用于检查数据的完整性。任意长度的输入(IV)经 MD5 处理后都产生 128-bit/16-byte 的 Hash 值。Slackware 就使用 md5 保证软件的完整性。

不过,在 2004 年 8 月,当时在山大的王小云教授及其合作者发现了 MD5 的 弱点。迄今为止,SHA-0, SHA-1, MD4, MD5, HAVAL-128 和 RIPEMD 等加密算法都被证明存在弱点。

这里是一个 MD5 数据库,可以进行双向查询。

看到一个有意思的 说法:

    "人生就是个MD5算法,它不可逆,而每个人也都是一个自变量,因此每个人的MD5值都不一样。目前MD5可以解密了,想要解密人生,也不是不可以。"


来点实在的,在 Linux 调用 openssl 的 libcrypto.so* 库加密字符串:

    #include <stdio.h>
     #include <stdlib.h>
    #include <string.h>
    #include <openssl/md5.h>

    int main(int argc, char *argv[])
    {
        char password[68] = {0};
        MD5_CTX x;
        int i = 0, len;
        char *out = NULL;
        unsigned char d[16];
        unsigned char tmp[128] = { 0 };

        if (argc != 2) {
     printf("Usage: %s <message>/n", argv[0]);
     return -1;
        }

        strcpy(password, argv[1]);
    
        MD5_Init(&x);
        MD5_Update (&x, (char *) password, strlen(password));
        MD5_Final(d, &x);
        out = malloc(35);
        memset(out, 0x00, 35);
        strcpy(out, "$1$");
        printf ("MD5(/"%s/") = ", password);
        for (i = 0; i < 16; i++) {
     sprintf (out + (i*2), "%02X", d[i]);
        }
        out[32] = 0;
        printf ("%s/n", out);

        return 0;
    }

编译的时候记得调用 libcrypt.so :

    gcc -Wall -o md5 md5.c -lcrypto

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值