我正在尝试用RSA加密对用户输入进行加密。
使用Eclipse中的调试监视器,我可以看到当代码使用“e”为asciiLetter提供动力并尝试mod"n“时,”e“和”n“是一个太大的数字,并且返回无穷大或nan。有什么关于如何改变这一点的指导吗?
我将位长从1024更改为128,但这没有效果。
稍后,我需要解密,但正在努力使这部分工作在事前。
public class RSA {
static int bitlength = 128;
private static Random r = new Random();
private static BigInteger p = BigInteger.probablePrime(bitlength, r);
private static BigInteger q = BigInteger.probablePrime(bitlength, r);
private static BigInteger n = p.multiply(q);
private BigInteger phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
private static BigInteger e = BigInteger.probablePrime(bitlength / 2, r);
private BigInteger d;
private static BigInteger encryptedMessage; {
while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0) {
e.add(BigInteger.ONE);
}
BigInteger d = (e.modInverse(phi));
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter your message: ");
String clearMsg = input.nextLine().trim(); // String clearMsg = input.next();
System.out.println(clearMsg); // Check message trimmed
char userInputArray[] = clearMsg.toCharArray();
ArrayList<BigInteger> cipherTextArray = new ArrayList<BigInteger> ();
for (int i = 0; i < userInputArray.length; i++) {
int letter = userInputArray[i];
BigInteger bigLetter = new BigInteger(String.valueOf(letter));
BigInteger asciiLetter = (BigInteger) bigLetter;
BigInteger encryptedMessage = pow(asciiLetter, e);
BigInteger encryptM = encryptedMessage;
BigInteger encryptedMessageMod = encryptM.mod(n);
cipherTextArray.add(encryptedMessageMod);
}
System.out.println(cipherTextArray);
}
private static BigInteger pow(BigInteger asciiLetter, BigInteger e) {
// TODO Auto-generated method stub
return null;
而不是使用BigInteger.pow(...)然后在计算结果mod n的第二步中,查看BigInteger.modpow(...)
同时完成两个步骤,并且不需要在内存中有一个比你的内存更大的结果...
我在C#程序(我在下面提到)中使用了RSA非对称密钥加密算法,我必须通过java程序加密数据。我希望我的java程序生成与C#程序相同的加密密钥。 公钥: C#加密程序: Java加密方案: 我尝试了上述java程序,但结果如下: O+gw 7+X hY x A 9 ltD V 5 zE RsF 4 Dy Xg MTc/gx 82 wR tT 1 x fR 3 su Y 0 XB JLa dp 7
我不明白为什么下面的函数返回NaN,甚至答案不应该是NaN。我试着搜索类似的问题,但大多数是在其他编程语言中,我无法理解。 提前谢了。
我很熟悉在JavaScript中是“怪异的”,即总是返回,如本文所述。因此,不应进行比较来检查,而应使用isNaN(..)取而代之的是。 所以我惊讶地发现 这似乎不一致。为什么会有这种行为? 它是怎么工作的?方法是否专门检查?
我在一个JavaScript类中有一个乘法方法,它应该将数组中非未定义的所有元素相乘。我使用for loop检查每个元素的类型,即number并将它们推到一个空数组,然后使用reduce方法将它们相乘。但我现在有的问题是结果是返回南。我想知道我做错了什么。 下面是我的代码。 null null
想要在java中使用生成的RSA公钥,在c#函数中加密数据并在Java解密函数中解密。 生成的Java公钥已被替换为c#中的模数标记: C#加密功能: Java解密函数: 第一个问题:在c#XML字符串中替换模数标记中的Java公钥正确吗?指数标签呢?我用了AQAB值。 第二个问题:为什么在解密Java得到这个错误: 经过一些研究,我发现这是一个普遍的错误,什么原因会导致这种错误?