0
RSA 암호화로 사용자 입력을 암호화하려고합니다.암호화 중에 NaN을 반환하는 Java RSA 알고리즘
Eclipse에서 디버그 모니터를 사용하면 코드가 asciiLetter에 'e'를 입력하고 'n'을 수정하려고하면 'e'와 'n'이 너무 크고 돌아 오는 것을 볼 수 있습니다. 무한대 또는 NaN. 이것을 변경하는 방법에 대한 지침?
비트 길이를 1024에서 128로 변경했지만 아무 효과가 없습니다.
나중에 해독해야하지만 사전에이 부분을 작동 시키려고합니다. 대신 결과 개조 N을 산출하는 제 2 단계에서 후 BigInteger.pow (...)과의 사용
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 encryptedMessage = pow (asciiLetter, e);가 작동하지 않는 이유는 무엇입니까? ... pow (...)를 구현하지 않았습니다. – DarkSquirrel42
코드와 관련이 있습니까? private static BigInteger pow (BigInteger asciiLetter, BigInteger e) { // TODO 자동 생성 메소드 스텁 return null; 내가 무슨 일을하는지 잘 모르겠으니, 이클립스에 추가하고 싶다. 코딩에 익숙하지 않고 약간 갇혀있다. ( – user7888294
대신 BigInteger encryptedMessage = asciiLetter.pow (e);를 사용 하시겠습니까? – dejvuth