OpenSSLの計算SHA 1ハッシュ値

1475 ワード

SHA 1ハッシュ関数は、160 bit(20バイト)の長さのハッシュ値を生成する一般的なハッシュ関数である.
今日は、OpenSSLの既存のAPIを利用してデータのSHA 1ハッシュ値を計算する方法を紹介します.
まずOpenSSLに関するAPI声明を見てみましょう.
 
#include   
  •  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ハッシュ値を計算するために2つのAPIがある.
    最初のSHA 1関数は真っ白で、パラメータdはデータブロックの先頭アドレスであり、nはデータブロックの長さであり、計算されたハッシュ値はパラメータmdが指すメモリに格納される.mdがNULLの場合、SHA 1関数は計算されたハッシュ値を関数内部の静的空間に格納し、関数戻り値によって返します.先ほどSHA 1ハッシュ値の長さは20バイトであると述べたので、mdは少なくとも20バイトの空間サイズを持つ必要がある.もちろんOpenSSLは定数SHAを定義していますDIGEST_LENGTH.
     
    第2のAPIセットについては3つの関数からなることを示した.ざっと見ると、3つの関数がSHA 1関数を完成させる機能ではないかと感じるお客様もいます.どうして3つの関数を作るのですか.ほほほ、OpenSSLは明らかに十分な理由でこのようにしたのです.ポイントはSHA 1ですUpdateという関数は複数回呼び出され、計算されるハッシュ値のデータが重畳され、最終的にハッシュ値が生成されます.今でもその使用シーンを考えていない人もいるかもしれませんが、例を挙げてみましょう.
     
    例えば、ファイルサイズが6 GBの場合、32ビットのプログラムが4 GB以上のメモリスペースにアクセスできないことを知っています(プログラマが操作できるのは最大3 GBで、プログラム/データ/スタック/保護エリアなどが1 GB程度のスペースを占有することがあります).このとき、このファイルのハッシュ値をどのように計算しますか?SHA 1はきっとだめだ.このとき、私たちはN回に分けてこのファイルを読むことができて、毎回1 MBのデータを読んで、それからSHA 1_を呼び出しますUpdate関数はハッシュ値の計算を積算し、ファイルのすべてのデータを読み終わったらSHA 1_を呼び出します.Final関数を使用して、最終的なハッシュ値を取得します.
     
    どうですか.簡単にしましょう.貪欲で噛めません.今日はここまでです.
     
    転載先:https://blog.51cto.com/yinghao/562542