我试图了解openssl库与CLI相比如何工作,并且无法找到如何在这两者中使用SHA256来获得相同的答案。
即时通讯使用 OpenSSL 1.0.1e-fips 2013年2月11日
我的CLI命令是
echo a | openssl sha256
输出
(stdin)= 87428fc522803d31065e7bce3cf03fe47596631e5e07bbd7a0fde60c4cf25c7
C程序
int main( int argc, char *argv[] ) {
unsigned char msg[ 100 ];
long unsigned int msg_len;
unsigned char md[ SHA256_DIGEST_LENGTH ]; // SHA256_DIGEST_LENGTH = 32
msg_len = 100;
memset( msg, 0, msg_len );
msg[ 0 ] = 'a';
msg[ 1 ] = '\0';
if ( ! simpleSHA256( msg, msg_len, md ) ) {
return 1;
}
hex_print( md ); // for 0<=i<=32 do printf( "%02x", md[ i ] );
}
,其中
bool simpleSHA256( void *input, unsigned long length, unsigned char *md ) {
SHA256_CTX context;
if ( ! SHA256_Init( &context ) )
return false;
if ( ! SHA256_Update( &context, (unsigned char*)input, length ) )
return false;
if ( ! SHA256_Final( md, &context ) )
return false;
return true;
}
带输出:
653504743d03afc72051d85fce9bcb8afd05d7911e5c9fe91265fa36d7d98b0
我做错了什么?因为这两者都假设要回馈相同的输出
答案 0 :(得分:3)
执行echo a
时会打印字母和换行符。因此,您在C程序中使用的字符串应为"a\n"
。
此外,您还要对数组的 all 进行校验和,而不仅仅是命令行示例中使用的两个字母。请改用适当的长度。