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

  • 相关阅读:
    uboot的仓库在哪里?
    git如何查看执行过的历史git命令
    for(;;)和while(true)的区别
    CountDownLatch的理解和使用
    countDownLatch
    websocket @ServerEndpoint(value = "/websocket/{ip}")详解
    Java原子性操作之——Atomic包的原理分析
    CAS原理
    java线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束!!!
    ThreadPoolExecutor 线程池Demo
  • 原文地址:https://www.cnblogs.com/afxcn/p/3544643.html
Copyright © 2011-2022 走看看