これがコードです
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <byteswap.h>
#include "/usr/include/openssl/sha.h"
#include <evhttp.h>
bool hex2bin(unsigned char *p, const char *hexstr, size_t len);
bool hex2bin(unsigned char *p, const char *hexstr, size_t len)
{
while (*hexstr && len) {
char hex_byte[3];
unsigned int v;
if (!hexstr[1]) {
//applog(LOG_ERR, "hex2bin str truncated");
return false;
}
hex_byte[0] = hexstr[0];
hex_byte[1] = hexstr[1];
hex_byte[2] = 0;
if (sscanf(hex_byte, "%x", &v) != 1) {
//applog(LOG_ERR, "hex2bin sscanf '%s' failed",
//hex_byte);
return false;
}
*p = (unsigned char) v;
p++;
hexstr += 2;
len--;
}
return (len == 0 && *hexstr == 0) ? true : false;
}
int main(int argc, char **argv)
{
unsigned char hash[SHA256_DIGEST_LENGTH], hash1[SHA256_DIGEST_LENGTH];
uint32_t *hash32 = (uint32_t *) hash;
unsigned char data[128];
uint32_t *data32 = (uint32_t *) data;
int i;
hex2bin(data, argv[1], sizeof(data));
for (i = 0; i < 128/4; i++)
data32[i] = bswap_32(data32[i]);
SHA256(data, 80, hash1);
SHA256(hash1, SHA256_DIGEST_LENGTH, hash);
printf("%s\n\n",hash1);
return 0;
}
長いコードで申し訳ありません。また、不要なインクルードを気にしないでください。どれが必要かわからなかったので、関係なくコンパイルしました。
これは、Linux、Ubuntu 11.04で実行されるC(明らかに)で書かれています。
このプログラムは引数としていくつかの文字列を取り、それのsha256ハッシュを計算する必要があります(実際にハッシュする前にさまざまなことをしながら2回)。プログラムはコンパイルして実行し、文字列を取得しますが、ハッシュの代わりにいくつかの奇妙な文字を吐き出します。なんでそうなの?
PSこのコードは私のものではありません。私は自分用に別のプログラムにしましたが、私が言ったように、ハッシュの印刷は奇妙な文字で失敗します!
P.S2 SHA256 は、LibSSL の libcrypto ライブラリで定義されています。プログラムは、gcc を使用して -lcrypto 引数でコンパイルされます。