RSA字符串加密\解密

时间:2011-12-12 00:21:33

标签: c++ string rsa

如何使用N,P,Q和公钥/私钥e和d加密/解密字符串?

我尝试将每个单独的字符作为int进行转换,执行计算,然后将其作为char转换回来,但是在加密不同的字符后,我似乎得到相同的字符。

也就是说,这些字符似乎没有一对一映射。

for( int i = 0; i < message.length() - 1; i++ )
{
    ori = (int)message[ i ];

    for( int j = 0; j < e; j++ )
        ori = ( (int)message[ i ] * ori ) % N;

     message[ i ] = (char)ori;
}

N是两个素数的乘积,e是我试图加密的数字的指数。

1 个答案:

答案 0 :(得分:1)

有些注意事项:

  1. 你没有把它提升到e,你把它提升到e + 1,因为你从消息[i]开始到1然后再乘以消息[i] e更多次,给出消息[i]到e + 1。
  2. 当你把它作为一个字母再次投射时,这不太可行,因为没有理由相信它会在char范围内。除非N小于255,否则更有可能大多数情况下大于255。
  3. 通常,您不会以这种方式使用RSA对字符串进行编码,因为每个字符串都会编码为唯一的编号,因此它很容易受到字母频率攻击。相反,实际协议几乎总是通过使用RSA编码密钥然后使用密钥使用对称密钥块或流密码对消息进行编码来处理此问题。