当 M^e mod(N) = 0 (C++) 时,RSA 加密就会被破坏。怎么解决?

问题描述 投票:0回答:1

目前正在尝试在 C++ 中实现 RSA 加密,但遇到了加密消息的问题。

如果我们取 p = 2、q = 7,则 N = 14 且 phi = 6。e 被迫为 5,d 可以是各种数字,但让我们从列表 d = 11 中取出第一个适用的数字。现在假设要加密的 asccii 消息是“b”。

b 在 asccii 中是 98,如果我们用 e = 5、N = 14 加密,那么 98^5 mod(14) = 0 得到的加密消息是 0。现在,如果我们尝试用 d = 11 或任何 d 进行解密没关系,0^d mod14 = 0 表明原始消息是 0 或 NULL,这是不正确的。

如何解决这个问题,以便可以加密和解密任何消息而不丢失 M^5 mod14 为 0 的字符?

在代码中,我们获取已经加密的数据并将其转换为 asccii 值的向量:

#define ull unsigned long long int

void dataToAscii() {
    asciiVec = {};
    for (wchar_t c: dataString) {
        asciiVec.push_back((ull) c);
    }
}

然后调用解密

void decrypt(){
    std::vector<ull> decrypted;
    for (int i=0;i<= this->asciiVec.size()-1;i++) {
        decrypted.push_back(modPow((ull)this->asciiVec.at(i), (ull)privateKey.at(0), (ull)privateKey.at(1)));
    }
    deAsciiVec = decrypted;
    deAscciiToData();
}
void deAscciiToData() {
    deDataString = "";
    for (ull el:deAsciiVec) {
        deDataString.push_back((wchar_t) el);
    }
}

但我认为问题不在于代码,而在于 M^e mod(N) = 0 时所示的数学

c++ encryption key rsa modulo
1个回答
0
投票

正如 @President James K. Polk 评论的那样,

对于 RSA,明文必须小于模数。并且不要使用 p=2,仅使用奇素数。

© www.soinside.com 2019 - 2024. All rights reserved.