C语言 SHA256有表cli和openssl库



我试图了解openssl库与CLI相比是如何工作的,并且无法找到如何在这两个库中使用SHA256来获得相同的答案。

我使用OpenSSL 1.0.1e-fips 11 Feb 2013

我的CLI命令是

echo a | openssl sha256

输出

(stdin) = 87428 fc522803d31065e7bce3cf03fe47596631e5e07bbd7a0fde60c4cf25c7

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 ] = '';
    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

我做错了什么?因为这两个都应该返回相同的输出

当您执行echo a时,它打印字母换行符。所以你在C程序中使用的字符串应该是"an"

同样,您对数组的所有 进行校验和,而不仅仅是命令行示例中使用的两个字母。请使用合适的长度

最新更新