所以,我使用 java 来查找 RSA 密码的公钥。现在我不确定我在做什么,也不确定它是否正确。
我有公钥的信息。
C = 5449089907
n = p*q = 8271344041
q = 181123
p = n/q = 45667
d = 53
phi(n) = (p-1)(q-1) = 8271117252
让事情变得复杂的是 BigIntegers,对于 int 和 long 来说数字太大了,所以我必须使用笨拙的 BigIntegers。据我了解,我有以下方程需要求解。
e*5198987987 - x*8271117252 = 1
我正在尝试使用 euklidske 算法来解决它。在Java中我想我可以使用以下方法:
我将代码基于 phi(n) = 8271117252 和 d = 53。然后,我在 for 循环中使用 gcd,尝试从 for 循环到 phi(n) 上的 gdc 的 i 数字。如果结果为 1,则将 e 设置为 i 的迭代次数。然后我对 e 和 phi(n) 使用模反函数。当且仅当这等于 phi(n) 我得到了答案。 (我认为,这可能是错误的)。
无论如何,这是代码。一般来说,任何输入都会很棒,因为它让我有点发疯。
import java.math.BigInteger;
public class RSADecrypt {
BigInteger p = new BigInteger("53"); // Input privatekey.
BigInteger r = new BigInteger("8271344041");
BigInteger variabel_i;
BigInteger modinv;
BigInteger e;
public RSADecrypt () {
for (BigInteger bi = BigInteger.valueOf(1000000000);
bi.compareTo(BigInteger.ZERO) > 0;
bi = bi.subtract(BigInteger.ONE)) {
if(gcdThing(bi).equals(BigInteger.ONE))
e = bi;
if(modinv(e) == p) {
System.out.println(" I er "+ bi);
}
}
System.out.println("Ikke noe svar for deg!");
}
// Gcd funksjon.
public BigInteger gcdThing(BigInteger i) {
BigInteger b2 = new BigInteger(""+i);
BigInteger gcd = r.gcd(b2);
return gcd;
}
// Modinverse
public BigInteger modinv (BigInteger e2) {
variabel_i = new BigInteger(""+e2);
modinv = r.modInverse(variabel_i);
return modinv;
}
}
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)