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

Cryptography 给定n、e和密文(使用RSA),如何查找明文?,cryptography,rsa,Cryptography,Rsa,我研究过RSA算法,但似乎不可能?我只看过另一篇这样的帖子,没有提供答案。因为e是加密密钥,是一个简短的答案,如果参数上没有弱点,你就无法破解RSA 这里有一个你可能感兴趣的攻击的例子 如果消息空间很小,并且没有填充,则可以通过加密所有可能的明文并将其与密文进行比较来执行搜索 更完整的清单 虽然这可能不正确,或者只是花了很长时间(可能是从一个巨大的n开始),但我发现了这一点(使用Java作为BigInteger) 给定:n=大数字,e=3,c=大数字(密文) 查找:m(纯文本) 我们知道m=(c

我研究过RSA算法,但似乎不可能?我只看过另一篇这样的帖子,没有提供答案。

因为e是加密密钥,是一个简短的答案,如果参数上没有弱点,你就无法破解RSA

这里有一个你可能感兴趣的攻击的例子

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


更完整的清单

虽然这可能不正确,或者只是花了很长时间(可能是从一个巨大的n开始),但我发现了这一点(使用Java作为BigInteger)

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

我们知道m=(c^d)mod(n)和ed mod(phi)=1,因此我们可以推导出以下公式(使用BigInteger表示法):

首先,我们知道Euler创建了ToClient函数,因此通过实现来自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; 
}

如果e很小,比如3,(n和密文仍然很大),那么有可能吗?通过使用较小的消息空间,您可以尝试查找消息,而不是解密密钥。事实上,a只给了你一个问题。小公钥不是此次攻击的问题。如果消息空间很小,则它适用于每个公钥。