코드를 게시하기 전에 먼저 몇 가지 레이아웃을 레이아웃하는 것이 가장 좋습니다.자바에서 RSA 암호화를 위해 큰 숫자 저장하기
목표 :
작은 숫자의 몇 아주 기본적인 RSA 암호화를 수행합니다. RSA 암호화에 익숙한 사용자의 경우 아래 알고리즘에 사용되는 값을 게시했습니다.
현재 RSA 번호/값 :
P = 29
Q = 31
N = P * Q
피 = ((P-1) * (Q -1))
E = 11
내 문제 :
내 코드를 해독하려고 할 때 문제가 발생합니다. 암호화는 설계된대로 작동합니다.
코드 :
long[] mesg = new long[]{8, 7, 26, 28};
long[] encrypted_mesg = new long[mesg.length];
for(int i=0; i<mesg.length; i++){
encrypted_mesg[i]=(long)((Math.pow(mesg[i],E))%N);
System.out.print(encrypted_mesg[i] + " ");
}
System.out.println();
//Decrpyt (not functioning-long to small, Big Integer not working)
for(int j=0; j<encryp_mesg.length; j++){
BigInteger decrypt = new BigInteger(Math.pow(encryp_mesg[j],D) + "");
System.out.print(decrypt.toString() + " ");
}
초기 문제는 지수로 적용 할 때 D (비공개 지수)가, 오랫동안 큰하는 방법 있다는 사실이었다. 나는 빠른 Google 검색을 수행하고 BigInteger를 구현하려고했습니다. 나는이 프로그램을 실행하면이 오류를 던졌습니다 :
내가 문제를 해결하기 위해 노력했다 무엇Exception in thread "main" java.lang.NumberFormatException: For input string: "Infinity"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.math.BigInteger.<init>(BigInteger.java:461)
at java.math.BigInteger.<init>(BigInteger.java:597)
at RSA_Riddles.main(RSA_Riddles.java:23)**
: 나는 대답하지 않는 것을 알고 있기 때문에
정직하기를, 나는 정말 아무것도 시도하지 않은 무한대로 계산하지만 BigInteger는 생각합니다. 130^611과 같은 번호를 저장할 수 있습니까? 그렇다면 어떻게?
큰 질문 :
어떻게 암호 해독을 수행하는 데 필요한 값을 저장할 수 있습니까?
저를 도우려는 사람에게 미리 감사드립니다!
만약 당신의 암호화 계산이 29에서 대부분의 값에 대해 잘못된 결과를 산출 할 때 당신은 28까지의 값만 테스트 할 수 있을지 모르겠습니다. 또한 암호 해독은 유사하게 mod n : m = c^d mod n입니다. . 또한 exponentiate와 modulo를 별도로 수행하는 것은 장난감 크기에 거의 도움이되지 않지만 안전한 크기를 위해 일하는 것은 평생 (또는 컴퓨터)보다 오래 걸릴 것이므로 실제 구현은 Wikipedia에서 설명한대로 끼워 넣습니다. 그런 다음 장난감을 위해 너는 bignums을 전혀 필요로하지 않는 크기. –