gpt4 book ai didi

c++ - 尝试在具有 GMP 的 C++ 上使用 RSA 破译文件会产生不可预测的结果

转载 作者:行者123 更新时间:2023-12-02 09:51:43 26 4
gpt4 key购买 nike

我正在尝试使用 GMP 库实现 RSA 算法。当我尝试破译从文件中读取的加密值时,最终结果是一个比原始密文大几倍的值。
这是我的代码有问题的部分:

void cipher_file(mpz_t E, mpz_t N, string Filename){

// getting the file contents
// and converting the letters to their ASCII values

mpz_set_ui(CipheredLetter, TextASCII[j][k]);
mpz_powm(CipheredLetter,CipheredLetter,E,N);
// converting the resulting number to a string so that it can
// be written on a file
string AuxString(mpz_get_str(NULL,10,CipheredLetter));
CipheredLine.push_back(AuxString);
}
void decipher_file(mpz_t D, mpz_t N, string Filename){

// getting the file contents

while(getline(CipheredFile,ReadLine)){
stringstream Aux(ReadLine);
do{
Aux >> AuxString;
if(AuxString== "x") // end of line delimeter
break;

mpz_set_str(DecipheredLetter,AuxString.c_str(),10);
mpz_powm(DecipheredLetter,DecipheredLetter,D,N);
}while(Aux);
}
}
加密函数一个字母一个字母地工作,所以像 abc 这样的输入将作为 <ciphered a> <ciphered b> <ciphered b> 存储在加密文件中,即 a 的结果密码, bc由空格分隔。 EN是公钥的两部分,其中 N 是模数,E 是 (p-1)(q-1) 的互质数, DN是私钥的两部分。 key 生成按预期工作(生成素数 P 和 Q 我使用费马的素性检验,得到 D 我使用扩展欧几里得算法,GMP 的基本功能确认我的结果是正确的)。
问题发生在 decipher_file函数,在 mpz_powm线。该行的结果应该是原始文件中字母的 ASCII 代码,但是,结果不是那个,而是一个巨大且看似随机的数字。
这是一个发生的例子(请注意,这些只是 64 位整数,但是这意味着能够走得更远,我只是用 64 位整数进行测试):
E = 1792236355377141527966304989230907
N = 4648032597737790824232209858880409
D = 2807452368750797442560595530474579

ASCII Code of Read Letter: 54
Ciphered Value: 835328461955738677042072153797186

Read from Ciphered File: 835328461955738677042072153797186
"Deciphered" Value: 211928638691469780709516904424482
我找到了 this使用 GMP 的简单(并且有些旧)的 RSA 实现与我的意图几乎相同,并且以与我几乎相同的方式进行,但是,由于我无法理解的原因,他的工作正常。
感谢您阅读这么多。任何帮助表示赞赏。

最佳答案

您的 N没有两个不同的质因数:

4648032597737790824232209858880409 = 68176481265446597^2
这意味着您选择了 p = q .除了明显的安全问题( n 可以很容易地通过平方根分解),这将在计算 N 的 Carmichael 总函数时引起问题。 ( reference)。具体来说, lambda(pq) = (p-1)*(q-1)仅适用于 p != q .对于 p = q , 你必须使用 lambda(p^2) = p(p-1)反而。

关于c++ - 尝试在具有 GMP 的 C++ 上使用 RSA 破译文件会产生不可预测的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64021641/

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