- 论坛徽章:
- 0
|
本帖最后由 osmanthusgfy 于 2012-10-10 16:03 编辑
我写一段DSA签名算法的测试demo:
- #include <openssl/dsa.h>
- int main( int argc, char** argv )
- {
- unsigned char plaintext[] = "hhhhhhhhjjjjjjjjkkkkkkkwwwwwqqqqvvvvx" ;
- unsigned char* sig;
- unsigned int siglen;
- DSA* dsa = DSA_generate_parameters( 1024, NULL, 0, NULL, NULL, NULL, NULL );
-
- DSA_generate_key( dsa );
- sig = (unsigned char*)malloc( DSA_size(dsa) );
-
- if ( NULL == sig ) {
- DSA_free( dsa );
- return 1;
- }
-
- int ret = DSA_sign( 0, plaintext, strlen( (char*)plaintext ), sig, &siglen, dsa );
- if ( ret == 0 ) {
- free( sig );
- DSA_free( dsa );
- return 1;
- }
-
- uint8_t str[] = "hhhhhhhhjjjjjjjjkkkkkkkwwwwwqqqqvvvvx";
-
- ret = DSA_verify( 0, str, strlen( (char*)str ), sig, siglen, dsa);
- if ( 1 == ret ) {
- printf( "yes\n" );
- } else {
- printf( "no\n" );
- }
-
- free( sig );
- DSA_free( dsa );
-
- return 0;
- }
复制代码 在调用DSA_verify的时候, str和plaintext一样的时候, 验证肯定通过,
于是我分别将str改成"hhhhhhhhjjjjjjjjkkkkkkkwwwwwqqqqvvvvxabc", "hhhhhhhhjjjjjjjjkkkkkkkkwwwwwqqqqvvvvx",
"hhhhhhhhjjjjjjjjkkkkkkkwwwwwqqqqqvvvvx", "hhhhhhhhjjjjjjjjkkkkkkkwwwwwqqqqvvvvvx"
之类, 验证依旧通过. 按道理, 我把原文都改了, 为什么签名依旧通过了?
是我的代码有问题? 还是这真的是一个bug?
我使用的是版本: openssl-1.0.1c |
|