openssl库中安全哈希算法的使用
来源:互联网 发布:数据库入门基础知识 编辑:程序博客网 时间:2024/06/05 23:05
SHA
SHA1
SHA224
SHA256
SHA384
SHA512
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <openssl/sha.h>#include <openssl/crypto.h>static char *s1 = "abc";static int s1_len = 3;char *ret_sha = "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880";char *ret_sha1 = "a9993e364706816aba3e25717850c26c9cd0d89d";char *ret_sha224 = "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7";char *ret_sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad";char *ret_sha384 = "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7";char *ret_sha512 = "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f";static char *pt(unsigned char *md, int len){int i;static char buf[256];for (i = 0; i < len; i++)sprintf(&(buf[i * 2]), "%02x", md[i]);return (buf);}void sha(void){SHA_CTX c;unsigned char md[SHA_DIGEST_LENGTH];char *p;SHA((unsigned char *)s1, s1_len, md);p = pt(md, SHA_DIGEST_LENGTH);printf("SHA: %s\n", p);SHA_Init(&c);SHA_Update(&c, s1, s1_len);SHA_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));p = pt(md, SHA_DIGEST_LENGTH);printf("SHA: %s\n", p);}void sha1(void){SHA_CTX c;unsigned char md[SHA_DIGEST_LENGTH];char *p;SHA1((unsigned char *)s1, s1_len, md);p = pt(md, SHA_DIGEST_LENGTH);printf("SHA1: %s\n", p);SHA1_Init(&c);SHA1_Update(&c, s1, s1_len);SHA1_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));p = pt(md, SHA_DIGEST_LENGTH);printf("SHA1: %s\n", p);}void sha224(void){SHA256_CTX c;unsigned char md[SHA224_DIGEST_LENGTH];char *p;SHA224((unsigned char *)s1, s1_len, md);p = pt(md, SHA224_DIGEST_LENGTH);printf("SHA224: %s\n", p);SHA224_Init(&c);SHA224_Update(&c, s1, s1_len);SHA224_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));p = pt(md, SHA224_DIGEST_LENGTH);printf("SHA224: %s\n", p);}void sha256(void){SHA256_CTX c;unsigned char md[SHA256_DIGEST_LENGTH];char *p;SHA256((unsigned char *)s1, s1_len, md);p = pt(md, SHA256_DIGEST_LENGTH);printf("SHA256: %s\n", p);SHA256_Init(&c);SHA256_Update(&c, s1, s1_len);SHA256_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));p = pt(md, SHA256_DIGEST_LENGTH);printf("SHA256: %s\n", p);}void sha384(void){SHA512_CTX c;unsigned char md[SHA384_DIGEST_LENGTH];char *p;SHA384((unsigned char *)s1, s1_len, md);p = pt(md, SHA384_DIGEST_LENGTH);printf("SHA384: %s\n", p);SHA384_Init(&c);SHA384_Update(&c, s1, s1_len);SHA384_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));p = pt(md, SHA384_DIGEST_LENGTH);printf("SHA384: %s\n", p);}void sha512(void){SHA512_CTX c;unsigned char md[SHA512_DIGEST_LENGTH];char *p;SHA512((unsigned char *)s1, s1_len, md);p = pt(md, SHA512_DIGEST_LENGTH);printf("SHA512: %s\n", p);SHA512_Init(&c);SHA512_Update(&c, s1, s1_len);SHA512_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));p = pt(md, SHA512_DIGEST_LENGTH);printf("SHA512: %s\n", p);}int main(int argc, char *argv[]){if (argc > 1) {s1 = argv[1];}s1_len = strlen(s1);printf("calculating SHA* on '%s'\n", s1);sha();sha1();sha224();sha256();sha384();sha512();return 0;}
运行结果
$ gcc -Wall -lcrypto sha.c$ ./a.outcalculating SHA* on 'abc'SHA : 0164b8a914cd2a5e74c4f7ff082c4d97f1edf880SHA : 0164b8a914cd2a5e74c4f7ff082c4d97f1edf880SHA1 : a9993e364706816aba3e25717850c26c9cd0d89dSHA1 : a9993e364706816aba3e25717850c26c9cd0d89dSHA224 : 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7SHA224 : 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7SHA256 : ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adSHA256 : ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adSHA384 : cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7SHA384 : cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7SHA512 : ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49fSHA512 : ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f$ ./a.out 123calculating SHA* on '123'SHA : 4f797c608cab4a00501447df8ee8833f363ea7d3SHA : 4f797c608cab4a00501447df8ee8833f363ea7d3SHA1 : 40bd001563085fc35165329ea1ff5c5ecbdbbeefSHA1 : 40bd001563085fc35165329ea1ff5c5ecbdbbeefSHA224 : 78d8045d684abd2eece923758f3cd781489df3a48e1278982466017fSHA224 : 78d8045d684abd2eece923758f3cd781489df3a48e1278982466017fSHA256 : a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3SHA256 : a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3SHA384 : 9a0a82f0c0cf31470d7affede3406cc9aa8410671520b727044eda15b4c25532a9b5cd8aaf9cec4919d76255b6bfb00fSHA384 : 9a0a82f0c0cf31470d7affede3406cc9aa8410671520b727044eda15b4c25532a9b5cd8aaf9cec4919d76255b6bfb00fSHA512 : 3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2SHA512 : 3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2
- openssl库中安全哈希算法的使用
- openssl库中MD算法的使用
- SM2算法第二十三篇:openssl库中BIGNUM的使用
- openssl中aes、rsa算法的使用
- openssl库中BIGNUM的使用
- 使用openssl库进行AES算法的加密
- openssl中算法的组织方式
- 使用OpenSSL API安全编程
- 使用 OpenSSL 进行安全编程的基本方法流程
- linux下使用openssl创建安全的vsftp
- Linux下使用OpenSSL创建安全的vsFTP
- 使用OpenSSL API 建立SSL安全通信的一般流程
- 使用OpenSSL API 建立SSL安全通信的一般流程
- 使用 OpenSSL API 进行安全编程-创建基本的安全连接和非安全连接
- 在你的 iOS App中 使用 OpenSSL 库
- 在你的 iOS App中 使用 OpenSSL 库
- 在你的 iOS App中 使用 OpenSSL 库 转发
- 创建android中使用的openssl静态库
- 利用cx_Freeze将py文件打包成exe文件
- 基于UML2.0的系统设计思想
- Android布局之帧布局
- OC学习之UITextView
- C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举
- openssl库中安全哈希算法的使用
- android工程项目导入问题
- Eclipse maven构建springmvc项目
- hdu 4628 - Pieces(压缩dp)
- C4.5算法
- 多校第三场 Hdu 4627 最小公倍数问题
- 最大子序列和的求解(时间复杂度O(N))
- HDU 1158 Employment Planning
- 第三章C#变量和表达式