gpt4 book ai didi

c++ - RSA ... GNU MP : Cannot allocate memory (size=1307836444)

转载 作者:行者123 更新时间:2023-11-28 07:16:36 24 4
gpt4 key购买 nike

首先,我运行的是 Ubuntu 12.04 32 位。该程序通过将 cin 放入字符缓冲区来进行 RSA 公钥加密。然后,当我调用我的加密函数时,出现以下错误:

GNU MP: Cannot allocate memory (size=1307836444)
Aborted (core dumped)

当我更改生成的 p,q key 的位大小时,此运行时错误的大小会增加。此错误仅在我调用 encrypt() 后发生。

void generate_pq(mpz_t p, mpz_t q);
void compute_n(mpz_t n, const mpz_t p, const mpz_t q);
void compute_phiN(mpz_t phi_n, const mpz_t p, const mpz_t q);
void select_e(mpz_t e, mpz_t phi_n);
void compute_d(mpz_t d, mpz_t e, mpz_t phi_n);
void store_m(mpz_t m[], int& size);
void encrypt(mpz_t c[], mpz_t m[], const int size,
const mpz_t e, const mpz_t n);
void decrypt(mpz_t m2[], mpz_t c[], const int size,
const mpz_t d, const mpz_t n);

int main()
{
mpz_t p, q, n, phi_n, e, d;
mpz_inits(p, q, n, phi_n, e, d, NULL);

// 1. Generate p,q; compute n
generate_pq(p,q);
compute_n(n,p,q);
// 2. Compute phi(n)=(p-1)*(q-1)
compute_phiN(phi_n,p,q);
mpz_clear(p); mpz_clear(q);
// 3. Select encryption key e
select_e(e,phi_n);
// 4. Compute decryption key d
compute_d(d,e,phi_n);
// 5. m = message to be encrypted
mpz_t* m;
int size=0;
store_m(m,size);
// 6. c = encrypted message
mpz_t* c;
encrypt(c,m,size,e,n);
// 7. m2 = decrypted message
//mpz_t* m2;
//decrypt(m2,c,size,d,n);
return 0;
}

编译使用...

g++ -o rsa partb.cc -lgmpxx -lgmp

我已经尝试在 m、c 和 m2 的 for 循环中使用 mpz_clear。不用找了。这是加密函数:

void store_m(mpz_t m[], int& size) 
{
printf("Message: ");
char* buffer = new char[128];
cin.getline(buffer,128);
size = strlen(buffer); //size = buffer
m = new mpz_t[size];
for(int i=0; i<size; i++) {
mpz_init(m[i]);
mpz_set_ui(m[i],(int)buffer[i]);
}
}

void encrypt(mpz_t c[], mpz_t m[], const int size,
const mpz_t e, const mpz_t n)
{ /* c = cipher */
c = new mpz_t[size];
for(int i=0; i<size; i++) {
mpz_init(c[i]);
mpz_powm(c[i],m[i],e,n);
mpz_clear(m[i]);
} /* c = m^e(mod n) */
}

也许问题是我没有释放足够多的已声明和初始化的 mpz_t?我尝试清除 2 或 3 个 mpz_t,但似乎没有效果。请指教。

编辑!!!!!!!!

将段错误隔离到此语句:

mpz_powm(c[i],m[i],e,n);

最佳答案

你的变量 mpz_t* c 没有被 encrypt 函数改变,所以它在 encrypt 之后仍然指向一个随机的(可能无效的)地址> 返回。试试看:

无效加密(mpz_t*& c,...

关于c++ - RSA ... GNU MP : Cannot allocate memory (size=1307836444),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20127204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com