SHA256有table cli和openssl库

时间:2015-09-02 12:34:25

标签: c openssl sha256

我试图了解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
我做错了什么?因为这两者都假设要回馈相同的输出

1 个答案:

答案 0 :(得分:3)

执行echo a时会打印字母换行符。因此,您在C程序中使用的字符串应为"a\n"

此外,您还要对数组的 all 进行校验和,而不仅仅是命令行示例中使用的两个字母。请改用适当的长度。