项目作者: okdshin

项目描述 :
a header-file-only, SHA256 hash generator in C++
高级语言: C++
项目地址: git://github.com/okdshin/PicoSHA2.git
创建时间: 2014-02-14T14:22:59Z
项目社区:https://github.com/okdshin/PicoSHA2

开源协议:MIT License

下载


PicoSHA2 - a C++ SHA256 hash generator

Copyright © 2017 okdshin

Introduction

PicoSHA2 is a tiny SHA256 hash generator for C++ with following properties:

  • header-file only
  • no external dependencies (only uses standard C++ libraries)
  • STL-friendly
  • licensed under MIT License

Generating SHA256 hash and hash hex string

  1. // any STL sequantial container (vector, list, dequeue...)
  2. std::string src_str = "The quick brown fox jumps over the lazy dog";
  3. std::vector<unsigned char> hash(picosha2::k_digest_size);
  4. picosha2::hash256(src_str.begin(), src_str.end(), hash.begin(), hash.end());
  5. std::string hex_str = picosha2::bytes_to_hex_string(hash.begin(), hash.end());

Generating SHA256 hash and hash hex string from byte stream

  1. picosha2::hash256_one_by_one hasher;
  2. ...
  3. hasher.process(block.begin(), block.end());
  4. ...
  5. hasher.finish();
  6. std::vector<unsigned char> hash(picosha2::k_digest_size);
  7. hasher.get_hash_bytes(hash.begin(), hash.end());
  8. std::string hex_str = picosha2::get_hash_hex_string(hasher);

The file example/interactive_hasher.cpp has more detailed information.

Generating SHA256 hash from a binary file

  1. std::ifstream f("file.txt", std::ios::binary);
  2. std::vector<unsigned char> s(picosha2::k_digest_size);
  3. picosha2::hash256(f, s.begin(), s.end());

This hash256 may use less memory than reading whole of the file.

Generating SHA256 hash hex string from std::string

  1. std::string src_str = "The quick brown fox jumps over the lazy dog";
  2. std::string hash_hex_str;
  3. picosha2::hash256_hex_string(src_str, hash_hex_str);
  4. std::cout << hash_hex_str << std::endl;
  5. //this output is "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
  1. std::string src_str = "The quick brown fox jumps over the lazy dog";
  2. std::string hash_hex_str = picosha2::hash256_hex_string(src_str);
  3. std::cout << hash_hex_str << std::endl;
  4. //this output is "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
  1. std::string src_str = "The quick brown fox jumps over the lazy dog.";//add '.'
  2. std::string hash_hex_str = picosha2::hash256_hex_string(src_str.begin(), src_str.end());
  3. std::cout << hash_hex_str << std::endl;
  4. //this output is "ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c"

Generating SHA256 hash hex string from byte sequence

  1. std::vector<unsigned char> src_vect(...);
  2. std::string hash_hex_str;
  3. picosha2::hash256_hex_string(src_vect, hash_hex_str);
  1. std::vector<unsigned char> src_vect(...);
  2. std::string hash_hex_str = picosha2::hash256_hex_string(src_vect);
  1. unsigned char src_c_array[picosha2::k_digest_size] = {...};
  2. std::string hash_hex_str;
  3. picosha2::hash256_hex_string(src_c_array, src_c_array+picosha2::k_digest_size, hash_hex_str);
  1. unsigned char src_c_array[picosha2::k_digest_size] = {...};
  2. std::string hash_hex_str = picosha2::hash256_hex_string(src_c_array, src_c_array+picosha2::k_digest_size);

Generating SHA256 hash byte sequence from STL sequential container

  1. //any STL sequantial container (vector, list, dequeue...)
  2. std::string src_str = "The quick brown fox jumps over the lazy dog";
  3. //any STL sequantial containers (vector, list, dequeue...)
  4. std::vector<unsigned char> hash(picosha2::k_digest_size);
  5. // in: container, out: container
  6. picosha2::hash256(src_str, hash);
  1. //any STL sequantial container (vector, list, dequeue...)
  2. std::string src_str = "The quick brown fox jumps over the lazy dog";
  3. //any STL sequantial containers (vector, list, dequeue...)
  4. std::vector<unsigned char> hash(picosha2::k_digest_size);
  5. // in: iterator pair, out: contaner
  6. picosha2::hash256(src_str.begin(), src_str.end(), hash);
  1. std::string src_str = "The quick brown fox jumps over the lazy dog";
  2. unsigned char hash_byte_c_array[picosha2::k_digest_size];
  3. // in: container, out: iterator(pointer) pair
  4. picosha2::hash256(src_str, hash_byte_c_array, hash_byte_c_array+picosha2::k_digest_size);
  1. std::string src_str = "The quick brown fox jumps over the lazy dog";
  2. std::vector<unsigned char> hash(picosha2::k_digest_size);
  3. // in: iterator pair, out: iterator pair
  4. picosha2::hash256(src_str.begin(), src_str.end(), hash.begin(), hash.end());