-
MD5 암호화 알고리즘[프로그램]/유용한 프로그램 2007. 10. 5. 15:45728x90
출처는 코드프로젝트입니다.
Introduction
A few times I've seen implementations of individual hashing algorithms, and thought it may be a good idea to group them together in an easy to use class. Well, here it is.
What are hashes anyway?
Hashes are a string of letters/numbers. They are used as a representation of an amount of data, but they are one way, you cannot go from a hash back to the original data; as hashes are fixed length, you also cannot determine the length or amount of the data represented. This lends hashes to practical security uses, as well as integrity uses.
Why use hashes?
There are multiple uses for hashes, the main one being data integrity. For example, a P2P client would use hashes to validate a file on completion, to check it's not corrupt or "fake". In this way, by generating a hash of a file, you can compare it against another hash, and check whether the files are the same.
Using the code
Putting
CHash
into use is relatively simple.The main functions that will be used are:
DoHash
SetHashAlgorithm
SetHashFile
SetHashOperation
SetHashString
An example of hashing a string with MD5:
// Define a CHash object CHash hashObj; // Set the algorithm hashObj.SetHashAlgorithm(MD5); // Set the operation hashObj.SetHashOperation(STRING_HASH); // Set the string hashObj.SetHashString("String to hash"); // Hash the string CString outHash = hashObj.DoHash();
An example of hashing a file with SHA-1:
// Define a CHash object CHash hashObj; // Set the algorithm hashObj.SetHashAlgorithm(SHA1); // Set the operation hashObj.SetHashOperation(FILE_HASH); // Set the file hashObj.SetHashFile("C:\\Windows\\Explorer.exe"); // Hash the file CString outHash = hashObj.DoHash();
The code is the same throughout, except for SHA-2, which has an extra function,
SetSHA2Strength
, which takes one parameter, the strength of the hash, which can be 256, 384 or 512.An example usage of this is:
// Define a CHash object CHash hashObj; // Set the operation hashObj.SetHashOperation(FILE_HASH); // Set the algorithm hashObj.SetHashAlgorithm(SHA2); // Set the SHA-2 strength hashObj.SetSHA2Strength(256); // Set the file hashObj.SetHashFile("C:\\Windows\\Explorer.exe"); // Hash the file CString outHash = hashObj.DoHash();
Choosing which algorithms to include
In version 1.5, I made the class modular, so you can exclude/include specific algorithms (cutting down on unnecessary code if you don't want certain ones). To choose which you want to use, go to CHash.h, and find:
// Choose which algorithms you want // Put 1s to support algorithms, else 0 to not support
Under here you will find defines such as:
#define SUPPORT_CRC32 1
Change the 1s to 0s if you wish to exclude an algorithm.
Hashing styles
In version 1.2, I added hashing styles. This allows the programmer to customize the output hashes. There are four styles:
- Lowercase, no spaces:
b4df98798c02b7c7a500d18632bf5b7d
- Lowercase, spaces:
b4 df 98 79 8c 02 b7 c7 a5 00 d1 86 32 bf 5b 7d
- Uppercase, no spaces:
B4DF98798C02B7C7A500D18632BF5B7Dd
- Uppercase, spaces:
B4 DF 98 79 8C 02 B7 C7 A5 00 D1 86 32 BF 5B 7D
These can be set with
SetHashFormat()
.Acknowledgements
- Thanks to Dominik Reichl for his excellent ReHash program.
- Thanks to Markku-Juhani O. Saarinen for his GOST-Hash implementation.
- Thanks to Dr. Brian Gladman for the SHA-1/SHA-2 implementations.
History
- 1.0
- 1st May, 2005: First public release.
- 1.1
- 2nd May, 2005: Added
SetHashAlgorithm()
andDoHash()
as recommended.
- 2nd May, 2005: Added
- 1.2
- 3rd May, 2005:
- Added hashing styles.
- Added the GOSTHash algorithm.
- Added
GetHashAlgorithm()
. - Rewrote the hashing functions to be more efficient.
- 3rd May, 2005:
- 1.3
- 4th May, 2005: Updated the demo project.
- 1.5
- 8th May, 2005:
- Added CRC32.
- Made the class "modular" so that you can exclude algorithms from compile.
- Added
GetHashFormat()
. - Updated the code as suggested.
- 8th May, 2005:
- 1.6
- 3rd August, 2005:
- Fixed a memory leak.
- Made each hash more efficient, tidied up code in general.
- 3rd August, 2005:
About .rich.w
728x90