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

  • 相关阅读:
    单独使用mybatis创建多数据源
    【mybatis-oracle】批量插入、批量删除以及xml文件大于号 小于号处理
    让只连了内网某台机器A的机器B能上外网
    python类静态函数和变量,heapq自定义优先级队列
    git 的基础
    Java线程池
    ansible 管理工具
    理解容器跨主机通信一
    Java多线程的实现方式二
    单机容器网络
  • 原文地址:https://www.cnblogs.com/afxcn/p/3544643.html
Copyright © 2011-2022 走看看