SHA256 有 table 个 cli 和 openssl 库

SHA256 has table cli and openssl library

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

我使用 OpenSSL 1.0.1e-fips 2013 年 2 月 11 日

我的 CLI 命令是

echo a | openssl sha256

输出

(标准输入)= 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 ] = '[=12=]';

    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程序中使用的字符串应该是"a\n".

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