给定n,e和密文(使用RSA),如何找到明文?

时间:2018-10-01 02:38:32

标签: cryptography rsa

我已经研究了RSA算法,但似乎不可能吗?我只看过这样的另一篇文章,没有提供答案。

2 个答案:

答案 0 :(得分:0)

由于e是加密密钥,是简短的答案,如果参数没有弱点,就无法破解RSA。

以下是一些您可能感兴趣的攻击的示例;

如果消息空间很小并且没有填充,则可以通过对所有可能的纯文本进行加密并将其与密文进行比较来执行搜索。

here更为完整的列表;

答案 1 :(得分:0)

尽管这可能是不正确的,或者只是花费了很长时间(可能来自一个很大的n),但我发现了这一点(使用Java作为其BigInteger的对象);

给出:n =大数,e = 3,c =大数(密文) 查找:m(纯文本)

我们知道m =(c ^ d)mod(n)且ed mod(phi)= 1,所以我们可以得出以下内容(使用BigInteger表示法):

首先,我们知道Euler实现了Totient函数,因此通过实现HotJar中的代码,我们将能够做到这一点:

BigInteger m = c.modPow(e.modInverse(phi(n)), n); //This is in BigInteger Notation

来自HotJar,但由我更改以适合数据键入:

public static BigInteger gcd(BigInteger a, BigInteger b) 
{ 
    if (a.equals(new BigInteger("0"))) 
        return b; 
    return gcd(b.mod(a), a); 
} 

// A simple method to evaluate 
// Euler Totient Function 
public static BigInteger phi(BigInteger n) 
{ 
    BigInteger result = new BigInteger("1"); 

    for(BigInteger i = new BigInteger("2"); i.compareTo(n) == (-1); i = i.add(new BigInteger("1")))
        if(gcd(i, n).equals(new BigInteger("1")))
            result = result.add(new BigInteger("1"));
    return result; 
}