C Openssl中的大数模小整数
我想知道,在Openssl中,一个大数字是否可能模化一个小整数 假设我生成两个大素数:C Openssl中的大数模小整数,c,openssl,C,Openssl,我想知道,在Openssl中,一个大数字是否可能模化一个小整数 假设我生成两个大素数: BN_generate_prime(p,512,0,0,0,0,0); BN_generate_prime(q,512,0,0,0,0,0); 并计算产品N: BN_mul(N,p,q,ctx); 我想测试N是否是一个“Blum整数”(N mod 4==3),但是我不知道怎么做,因为函数BN_mod只支持大数字。是的,这是可能的 jww的答案中给出了最好、最有效的方法,那就是打电话 一种效率较低的方法是先
BN_generate_prime(p,512,0,0,0,0,0);
BN_generate_prime(q,512,0,0,0,0,0);
并计算产品N
:
BN_mul(N,p,q,ctx);
我想测试N
是否是一个“Blum整数”(N mod 4==3),但是我不知道怎么做,因为函数BN_mod
只支持大数字。是的,这是可能的
jww的答案中给出了最好、最有效的方法,那就是打电话
一种效率较低的方法是先将一个小整数ABIGNUM
转换。这很麻烦,但并不难。我将向您展示通过使用BN\u mod
计算11 mod 3
来创建BIGNUM
的两种方法。首先,为您的数字声明一个BIGNUM
BIGNUM *N = BN_new();
BIGNUM *M = BN_new();
方法1:将数字转换为字符串,然后将字符串转换为BIGNUM
#include <sstream>
int n = 11;
std::ostringstream num_str;
num_str << n;
BN_dec2bn( &N, num_str.str().c_str() );
然后像平常一样使用OpenSSL函数
BN_mod(rem, N, M, ctx);
BN_print_fp(stdout, rem); // (Using N=11 and M=3 above, this line prints 2)
释放你的BIGNUM
s
BN_free(N);
BN_free(M);
我想知道,在Openssl中,一个大数字是否可能模化一个小整数
。。。测试N是否是一个“Blum整数”(N mod 4==3),但是我不知道怎么做,因为函数BN_mod只支持大数字
是的,但它必须是一个无符号整数,这似乎与mod 4等价类有关。使用BN_ULONG BN_mod_单词(const BIGNUM*a,BN_ULONG w)
在使用Diffie-Hellman参数之前,我使用它来验证这些参数。例如,请参见上的
该函数的手册页位于。为什么不测试是否设置了(最低有效)位0和1?e、 g.(p->d[0]&0x3==0x3)
,或者BN是位集(p,0)和&BN是位集(p,1)
-我这里遗漏了什么吗?
BN_free(N);
BN_free(M);