Java 带biginteger的rsa接受p&;来自用户的q
我正在尝试的是使用rsa加密当前日期和时间,并使用此密码文本输入另一个应用程序以验证用户身份 这是代码。我对java不感兴趣,所以我从互联网上复制了它,并对它做了一些更改 程序-Java 带biginteger的rsa接受p&;来自用户的q,java,encryption,cryptography,rsa,biginteger,Java,Encryption,Cryptography,Rsa,Biginteger,我正在尝试的是使用rsa加密当前日期和时间,并使用此密码文本输入另一个应用程序以验证用户身份 这是代码。我对java不感兴趣,所以我从互联网上复制了它,并对它做了一些更改 程序- import java.math.BigInteger; import java.security.SecureRandom; import java.util.Scanner; import java.util.Date; import java.text.DateFormat; import java.text.S
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.Scanner;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class RSA3
{
public BigInteger n, d, e;
private int bitlen = 16;
/** Create an instance that can both encrypt and decrypt. */
public RSA3(int bits)
{
bitlen = bits;
SecureRandom r = new SecureRandom();
Scanner in = new Scanner(System.in);
String number1, number2;
System.out.println("Enter first number");
number1 = in.nextLine();
System.out.println("Enter second number");
number2 = in.nextLine();
BigInteger p = new BigInteger(number1);
BigInteger q = new BigInteger(number2);
//BigInteger p = new BigInteger(bitlen / 2,100,r);
//BigInteger q = new BigInteger(bitlen / 2,100,r);
n = p.multiply(q);
System.out.println("\n n="+n);
BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE));
System.out.println("\n m="+m);
e = new BigInteger("3");
while (m.gcd(e).intValue() > 1)
{
e = e.add(new BigInteger("2"));
}
System.out.println("\n e="+e);
d = e.modInverse(m);
System.out.println("\n d="+d);
}
/** Encrypt the given plaintext message. */
public synchronized BigInteger encrypt(BigInteger message)
{System.out.println("\n 2nd enc");
return message.modPow(e, n);
}
/** Decrypt the given ciphertext message. */
public synchronized BigInteger decrypt(BigInteger message)
{System.out.println("\n2nd dec");
return message.modPow(d, n);
}
/** Trivial test program. */
public static void main(String[] args)
{
RSA3 rsa = new RSA3(1024);
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHH");
//get current date time with Date()
Date date = new Date();
System.out.println(dateFormat.format(date));
String text1 = dateFormat.format(date);
System.out.println("Plaintext: " + text1);
BigInteger plaintext = new BigInteger(text1.getBytes());
BigInteger ciphertext = rsa.encrypt(plaintext);
System.out.println("Ciphertext: " + ciphertext);
plaintext = rsa.decrypt(ciphertext);
String text2 = new String(plaintext.toByteArray());
System.out.println("Plaintext: " + text2);
}
}
如果我像在代码中那样从用户处获取p&q值。密文有点问题。
但是如果我使用biginger(bitlen/2100,r);它工作得很好。
但每次用这个随机数生成密文都是新的。我不想这样
我想要我自己选择的p&q
我想我把biginteger搞砸了。
请让我知道,如果有任何其他方法,我可以做到这一点
我在这里找不到逻辑错误
请帮忙
谢谢目前还不清楚您当前的代码有什么问题。请澄清这一点,并相应地回答您的问题。请快速回复,并为我糟糕的英语感到抱歉。您是想在项目中使用此RSA实现,还是这纯粹是学术性的?教科书坏了。要使RSA安全,必须使用OAEP等填充方案。Java通过提供所有必要的东西来完成这项工作。您的代码可以正常工作。您可能在输入两个长素数时出错。当发布到stackoverflow时,请尽可能描述您的问题。“密文有问题”永远不是一个好的错误描述。