BN 사용 조심bin2bn 과 BNbn2bin

3745 단어 linux
        BIGNUM *a = NULL;
        BIGNUM *b = NULL;
	BIGNUM *c = NULL;
	unsigned char *xychar= NULL;
	int i;
	unsigned char data[20];
		
	const unsigned char testk[20] =
	{
    	0x00, 0x01, 0x43, 0xbd, 0x74, 0x9d, 0xd4, 0x99, 0x00, 0xdb, 0xaa, 0xa1, 0xeb, 0xd2, 0xc9, 0xcb, 0xed, 0x2e, 0xbe, 0x0c
	};
		
	a = BN_new();
        b = BN_new();
	c = BN_new();

	BN_one( a );
	BN_bin2bn( testk, 9, b );
	BN_bin2bn( testk, 20, c );

	//a
	printf("one ->dmax = %d, a:
", a->dmax); xychar = (unsigned char *)a->d; for (i = 0; i < 20; i ++ ) { printf( "%02x, ", xychar[i] ); if ( ( i + 1 ) % 10 == 0 ) { printf( "
" ); } } memset(data, 0, 20); BN_bn2bin( a, data ); printf("a data:
"); for (i = 0; i < 20; i ++ ) { printf( "%02x, ", data[i] ); if ( ( i + 1 ) % 10 == 0 ) { printf( "
" ); } } printf("a data BN_num_bits:%d
", BN_num_bits(a)); //b printf("b ->dmax = %d, b:
", b->dmax); xychar = (unsigned char *)b->d; for (i = 0; i < 20; i ++ ) { printf( "%02x, ", xychar[i] ); if ( ( i + 1 ) % 10 == 0 ) { printf( "
" ); } } memset(data, 0, 20); BN_bn2bin( b, data ); printf("b data:
"); for (i = 0; i < 20; i ++ ) { printf( "%02x, ", data[i] ); if ( ( i + 1 ) % 10 == 0 ) { printf( "
" ); } } printf("b data BN_num_bits:%d
", BN_num_bits(b)); //c printf("c ->dmax = %d, c:
", c->dmax); xychar = (unsigned char *)c->d; for (i = 0; i < 20; i ++ ) { printf( "%02x, ", xychar[i] ); if ( ( i + 1 ) % 10 == 0 ) { printf( "
" ); } } memset(data, 0, 20); BN_bn2bin( c, data ); printf("c data:
"); for (i = 0; i < 20; i ++ ) { printf( "%02x, ", data[i] ); if ( ( i + 1 ) % 10 == 0 ) { printf( "
" ); } } printf("c data BN_num_bits:%d
", BN_num_bits(c));

 
연산 위 코드 출력 은 다음 과 같 습 니 다:
one ->dmax = 1, a: 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 11, 00, 00, 00, 00, 99, d4, 9d, a data: 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, a data BN_num_bits:1 b ->dmax = 3, b: 00, 99, d4, 9d, 74, bd, 43, 01, 00, 00, 00, 00, 19, 00, 00, 00, 0c, be, 2e, ed, b data: 01, 43, bd, 74, 9d, d4, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, b data BN_num_bits:57 c ->dmax = 5, c: 0c, be, 2e, ed, cb, c9, d2, eb, a1, aa, db, 00, 99, d4, 9d, 74, bd, 43, 01, 00, c data: 01, 43, bd, 74, 9d, d4, 99, 00, db, aa, a1, eb, d2, c9, cb, ed, 2e, be, 0c, 00, c data BN_num_bits:145 one ->dmax = 1, a: 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 11, 00, 00, 00, 00, 99, d4, 9d, a data: 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, a data BN_num_bits:1 b ->dmax = 3, b: 00, 99, d4, 9d, 74, bd, 43, 01, 00, 00, 00, 00, 19, 00, 00, 00, 0c, be, 2e, ed, b data: 01, 43, bd, 74, 9d, d4, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, b data BN_num_bits:57 c ->dmax = 5, c: 0c, be, 2e, ed, cb, c9, d2, eb, a1, aa, db, 00, 99, d4, 9d, 74, bd, 43, 01, 00, c data: 01, 43, bd, 74, 9d, d4, 99, 00, db, aa, a1, eb, d2, c9, cb, ed, 2e, be, 0c, 00, c data BN_num_bits:145
 
아무튼 BNbn2bin 변환 후의 값 은 높 은 0 을 제거 합 니 다. 출력 된 바이트 길이 가 꼭 20 개의 바이트 만 은 아 닙 니 다. 소홀히 해 서 는 안 된다.
 
 

좋은 웹페이지 즐겨찾기