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 进行校验和,而不仅仅是命令行示例中使用的两个字母。请改用适当的长度。
我试图了解 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 进行校验和,而不仅仅是命令行示例中使用的两个字母。请改用适当的长度。