CLX C++ Libraries
Home >> sha1

Declaration

class sha1;

Overview

sha1 は,引数に指定された文字列,または1Byte(char 型)の配列に対して SHA-1 方式でハッシュ値を計算するためのクラスです.使用方法は以下のようになります.

  1. reset() メソッドで初期化を行う.
  2. update() メソッドに計算を行うためのデータを指定して呼び出す.update() メソッドは,複数回呼び出すことも可能.
  3. finish() メソッドで計算処理を終了する.

一度に全てのデータを渡せる場合,これらのメソッドを順番に呼び出す代わりに encode() メソッドを用いることもできます.encode() メソッドは,reset(),update(), finish() メソッドを一度に呼び出します.

Example

example_sha1.cpp

#include <iostream>
#include <cstdlib>
#include "clx/sha1.h"

int main(int argc, char* argv[]) {
    std::string s1 = "abc";
    std::string s2 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
    std::string s3 = "a";
    std::string s4 = "0123456701234567012345670123456701234567012345670123456701234567";
    
    clx::sha1 hash;
    
    std::cout << "str: " << s1 << std::endl;
    std::cout << "sha1: " << hash.encode(s1).to_string() << std::endl;
    std::cout << std::endl;
    
    std::cout << "str: " << s2 << std::endl;
    std::cout << "sha1: " << hash.encode(s2).to_string() << std::endl;
    std::cout << std::endl;
    
    std::cout << "str: " << s3 << std::endl;
    hash.reset();
    for (int i = 0; i < 1000000; i++) {
        hash.update(s3.c_str(), s3.size());
    }
    hash.finish();
    std::cout << "sha1: " << hash.to_string() << std::endl;
    std::cout << std::endl;
    
    std::cout << "str: " << s4 << std::endl;
    hash.reset();
    for (int i = 0; i < 10; i++) {
        hash.update(s4.c_str(), s4.size());
    }
    hash.finish();
    std::cout << "sha1: " << hash.to_string() << std::endl;
    std::cout << std::endl;
    
    return 0;
}
Result
str: abc
sha1: a9993e364706816aba3e25717850c26c9cd0d89d

str: abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq
sha1: 84983e441c3bd26ebaae4aa1f95129e5e54670f1

str: a
sha1: 34aa973cd4c4daa4f61eeb2bdbad27316534016f

str: 0123456701234567012345670123456701234567012345670123456701234567
sha1: dea356a2cddd90c7a7ecedc5ebb563934f460452

Related Types

typedef unsigned char uchar_t;
typedef char char_type;
typedef std::string string_type;

Construction and Member Functions

sha1();
explicit sha1(const char_type* src, size_t n);
explicit sha1(const string_type& src);
sha1& encode(const char_type* src, size_t n);
sha1& encode(const string_type& src);

void reset();
void update(const char_type* src, size_t n);
void finish();

SHA-1 方式のハッシュ値を計算する場合は,encode() メソッドか,reset(),update(), finish() メソッド群のどちらかを使用します.後者のメソッド群は, データサイズが大きいなどの理由で一度に全てのデータを渡すことができない場合に使用します.

int size() const;
const uchar_t* code() const;
string_type to_string() const;

size() メソッドは,計算結果のハッシュ値のデータサイズを返します.code() メソッドは, 計算結果のハッシュ値を返します.to_string() メソッドは,計算結果を数値文字列に変換したものを返します.

Related Page

  1. CLX C++ Libraries - md5

Referrence

  1. RFC3174 - US Secure Hash Algorithm 1 (SHA1)