zoukankan      html  css  js  c++  java
  • 几个常用的散列算法

    MD5:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <openssl/md5.h>
    
    #pragma comment(lib,"libeay32.lib")
    
    #define BLKSIZE 4096
    
    #define OUTSIZE 16
    
    int main(int argc, char *argv[])
    {
        int bytes;
        int i;
        unsigned char output[OUTSIZE];
        MD5_CTX s;
        unsigned char data[BLKSIZE];
        FILE *fn;
    
        if(argc < 2){
            printf ("please input a filename.
    ");
            return 0;
        }
    
        fn = fopen(argv[1], "rb");
    
        if (fn == NULL) {
            printf ("%s can't be opened.
    ", argv[1]);
            return 0;
        }
    
        MD5_Init(&s);
    
        while ((bytes = fread(data, 1, BLKSIZE, fn)) != 0){
            MD5_Update(&s, data, bytes);
        }
    
        MD5_Final(output, &s);
    
        fclose(fn);
    
        for(i = 0; i < OUTSIZE; i++) {
            printf("%02x", output[i]);
        }
    
        return 0;
    }

    SHA1:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <openssl/sha.h>
    
    #pragma comment(lib,"libeay32.lib")
    
    #define BLKSIZE 4096
    #define OUTSIZE 20
    
    int main(int argc, char *argv[])
    {
        int bytes;
        int i;
        unsigned char output[OUTSIZE];
        SHA_CTX s;
        unsigned char data[BLKSIZE];
        FILE *fn;
    
        if(argc < 2){
            printf ("please input a filename.
    ");
            return 0;
        }
    
        fn = fopen(argv[1], "rb");
    
        if (fn == NULL) {
            printf ("%s can't be opened.
    ", argv[1]);
            return 0;
        }
    
        SHA1_Init(&s);
    
        while ((bytes = fread(data, 1, BLKSIZE, fn)) != 0){
            SHA1_Update(&s, data, bytes);
        }
    
        SHA1_Final(output, &s);
    
        fclose(fn);
    
        for(i = 0; i < OUTSIZE; i++) {
            printf("%02x", output[i]);
        }
    
        return 0;
    }

    SHA256:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <openssl/sha.h>
    
    #pragma comment(lib,"libeay32.lib")
    #pragma comment(lib,"user32.lib")
    #pragma comment(lib,"advapi32.lib")
    
    #define BLKSIZE 4096
    #define OUTSIZE 32
    
    int main(int argc, char *argv[])
    {
        int bytes;
        int i;
        unsigned char output[OUTSIZE];
        SHA256_CTX s;
        unsigned char data[BLKSIZE];
        FILE *fn;
    
        if(argc < 2){
            printf ("please input a filename.
    ");
            return 0;
        }
    
        fn = fopen(argv[1], "rb");
    
        if (fn == NULL) {
            printf ("%s can't be opened.
    ", argv[1]);
            return 0;
        }
    
        SHA256_Init(&s);
    
        while ((bytes = fread(data, 1, BLKSIZE, fn)) != 0){
            SHA256_Update(&s, data, bytes);
        }
    
        SHA256_Final(output, &s);
    
        fclose(fn);
    
        for(i = 0; i < OUTSIZE; i++) {
            printf("%02x", output[i]);
        }
    
        return 0;
    }

    SHA512:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <openssl/sha.h>
    
    #pragma comment(lib,"libeay32.lib")
    #pragma comment(lib,"user32.lib")
    #pragma comment(lib,"advapi32.lib")
    
    #define BLKSIZE 4096
    #define OUTSIZE 64
    
    int main(int argc, char *argv[])
    {
        int bytes;
        int i;
        unsigned char output[OUTSIZE];
        SHA512_CTX s;
        unsigned char data[BLKSIZE];
        FILE *fn;
    
        if(argc < 2){
            printf ("please input a filename.
    ");
            return 0;
        }
    
        fn = fopen(argv[1], "rb");
    
        if (fn == NULL) {
            printf ("%s can't be opened.
    ", argv[1]);
            return 0;
        }
    
        SHA512_Init(&s);
    
        while ((bytes = fread(data, 1, BLKSIZE, fn)) != 0){
            SHA512_Update(&s, data, bytes);
        }
    
        SHA512_Final(output, &s);
    
        fclose(fn);
    
        for(i = 0; i < OUTSIZE; i++) {
            printf("%02x", output[i]);
        }
    
        return 0;
    }

    需要注意的是sha256和sha512需要用到user32.lib和advapi32.lib

  • 相关阅读:
    Hypercall机制
    python 基础-----数字,字符串,if while 循环 数据类型的转换简单介绍
    计算机基础知识
    Proxmox初步了解
    Centos7-安装py3
    KVM-virsh常用命令
    Centos7-VNC安装
    Centos7-bond模式介绍
    KVM管理工具
    Win10-无法启动虚拟机
  • 原文地址:https://www.cnblogs.com/afxcn/p/3544643.html
Copyright © 2011-2022 走看看