Opensslを使用してmd 4,md 5,sha 1,sha 256,sha 384,sha 512などの一般的なハッシュ値を計算するにはどうすればいいですか?
1859 ワード
Opensslのライブラリの使い方は、前に紹介したので、くどくどせずにコードを直接与えます.
Unknown message digest xxx md4 is 3F1DED43A61E531EB49771D7519741A6 md5 is BD9A9CAE3D300EC608C217658E20F934 sha1 is 842CC44DB178A7A73BDB2BCDB7386BCABD56A5CB sha256 is DB22DB9C451E72D85ED9348A736A69A66451593598C2CABACC949C6E33D844DF sha384 is 707F730102F9C512C53348BE2C0A80D5B5CB8C67CC7A4A4602E99710CD37466BC3ED4F076BA9B77428D1C2EC35A7F261 sha512 is DAE45250C34FCF0860D02F692B9FC79FEA7E6D82C342EB7C402C71959D1B8CABCFFBC61142FFA21344130E809F0AE87AA002C24DB3F1542BA8331A6E82743C7F
他のソフトウェアで生成された値と比較すると、完全に一致していることがわかります.Opensslはすごいですね
// openssl , , ,
#include
#include
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib") //
using namespace std;
int main()
{
char digestType[][20] =
{
"xxx", //
"md4",
"md5",
"sha1",
"sha256",
"sha384",
"sha512",
};
int size = sizeof(digestType) / sizeof(digestType[0]);
int i = 0;
for(i = 0; i < size; i++)
{
EVP_MD_CTX mdctx;
const EVP_MD *md = NULL;
char str[] = "testOpenssl";
unsigned char mdValue[EVP_MAX_MD_SIZE] = {0};
unsigned int mdLen = 0;
OpenSSL_add_all_digests();
md = EVP_get_digestbyname(digestType[i]);
if(!md) //
{
printf("Unknown message digest %s
", digestType[i]);
continue;
}
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
EVP_DigestUpdate(&mdctx, str, strlen(str));
EVP_DigestFinal_ex(&mdctx, mdValue, &mdLen);
EVP_MD_CTX_cleanup(&mdctx);
printf("%s is ", digestType[i]);
int j = 0;
for(j = 0; j < mdLen; j++)
{
printf("%02X", mdValue[j]);
}
printf("
");
}
return 0;
}
結果:Unknown message digest xxx md4 is 3F1DED43A61E531EB49771D7519741A6 md5 is BD9A9CAE3D300EC608C217658E20F934 sha1 is 842CC44DB178A7A73BDB2BCDB7386BCABD56A5CB sha256 is DB22DB9C451E72D85ED9348A736A69A66451593598C2CABACC949C6E33D844DF sha384 is 707F730102F9C512C53348BE2C0A80D5B5CB8C67CC7A4A4602E99710CD37466BC3ED4F076BA9B77428D1C2EC35A7F261 sha512 is DAE45250C34FCF0860D02F692B9FC79FEA7E6D82C342EB7C402C71959D1B8CABCFFBC61142FFA21344130E809F0AE87AA002C24DB3F1542BA8331A6E82743C7F
他のソフトウェアで生成された値と比較すると、完全に一致していることがわかります.Opensslはすごいですね