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

  • 相关阅读:
    编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的区别
    【转】 Oracle 用户权限管理方法
    oracle实例内存(SGA和PGA)调整
    oracle修改内存使用和性能调节,SGA
    下星期计划——9.7~9.13
    医疗数据分析——过高费用的异常检测
    Groovy介绍
    Java 7代码层面上的更新
    Java陷阱之assert关键字
    支持向量机(SVM)、支持向量回归(SVR)
  • 原文地址:https://www.cnblogs.com/afxcn/p/3544643.html
Copyright © 2011-2022 走看看