0 Reference
http://blog.youkuaiyun.com/liuhong135541/article/details/8138525
http://blog.youkuaiyun.com/shahongzhou/article/details/6586303
http://blog.sina.com.cn/s/blog_4c451e0e0100zf2j.html
1 Install
sudo apt-get install openssl
udo apt-get install libssl-dev
you will find ./usr/include/openssl/sha.h
and ./usr/lib/x86_64-linux-gnu/libcrypto.so
2 need link the libcrypto by using -lcrypto in the gcc command.
OpenSSL—SHA1(信息摘要算法)
SHA1算法是对MD5算法的升级,计算结果为20字节(160位),使用方法如下:
(1) int SHA_Init(SHA_CTX *c);
// 初始化 SHA Contex, 成功返回1,失败返回0
(2) int SHA_Update(SHA_CTX *c, const void *data, size_t len);
// 循环调用此函数,可以将不同的数据加在一起计算SHA1,成功返回1,失败返回0
(3) int SHA_Final(unsigned char *md, SHA_CTX *c);
// 输出SHA1结果数据,成功返回1,失败返回0
(4) unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);
// SHA_Init,SHA_Update,SHA_Final三个函数的组合,直接计算出SHA1的值
(5) void SHA_Transform(SHA_CTX *c, const unsigned char *data);
// 内部函数,不需要调用
#include <openssl/sha.h>
unsigned char *SHA1(const unsigned char *d, unsigned long n, unsigned char *md);
int SHA1_Init(SHA_CTX *c); int SHA1_Update(SHA_CTX *c, const void *data, unsigned long len); int SHA1_Final(unsigned char *md, SHA_CTX *c);
SHA-1 (Secure Hash Algorithm) is a cryptographic hash function with a 160bit output.
SHA1()
computes the SHA-1 message digest of the nbytes at d and places it in md (which must have space for SHA_DIGEST_LENGTH == 20 bytes of output). If md is NULL, the digest is placed in a static array.
The following functions may be used if the message is not completely storedin memory:
SHA1_Init()
initializes a SHA_CTX structure.
SHA1_Update()
can be called repeatedly with chunks of themessage to be hashed (len bytes at data).
SHA1_Final()
places the message digest in md, which must have space for SHA_DIGEST_LENGTH == 20 bytes of output, anderases the SHA_CTX.
Applications should use the higher level functionsEVP_DigestInit(3)etc. instead of calling the hash functions directly.
The predecessor of SHA-1, SHA, is also implemented, but it should be usedonly when backward compatibility is required.