Android 와. net 이 서로 연 결 된 RSA 암호 화

. net RSA 암호 화 에 사용 할 공개 키 는 다음 과 같은 문자열 입 니 다.
< RSAKyValue > < Modulus > sYbL... nGb = < / Modulus > < Exponent > AQAB < / Exponent > < / RSAKyValue > 와 같은 공개 키 는 자바 에서 직접 사용 할 수 없습니다.그래서 이 공개 키 를 바 꾸 는 데 사용 할 클래스 RsaHelper 를 인터넷 에서 찾 았 습 니 다.(RsaHelper 다운로드) 그리고:
PublicKey pubKey = RsaHelper.decodePublicKeyFromXml(Global.RSA_PUBLIC_KEY);
encryptedString = RsaHelper.encryptDataFromStr(plaintString,pubKey);

이렇게 하면 RSA 암호 화가 완성 되 고 암호 화 된 결 과 는. net 에 도 성공 적 으로 복호화 할 수 있 습 니 다 (자바 프로젝트 용 jdk 1.6). 
그리고 자바 프로젝트 의 코드 를 안 드 로 이 드 프로젝트 (android 2.3) 에 복 사 했 습 니 다. 암호 화 된 콘 텐 츠. net 엔 드 에서 복호화 할 수 없습니다!! 
안 드 로 이 드 프로젝트 와 자바 프로젝트 는 같은 코드 와 같은 공개 키 로 같은 문자열 을 암호 화 하 는데 결 과 는 다 릅 니까?
안 드 로 이 드 프로젝트 에서 같은 문자열 을 암호 화 할 때마다 암호 화 결 과 는 일치 합 니 다.그러나 자바 프로젝트 에 서 는 같은 문자열 을 암호 화하 더 라 도 매번 결과 가 다르다.
RsaHelper 의 코드 를 추적 해 보 세 요. 중요 한 몇 마디 는 다음 과 같 습 니 다.
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
return cipher.doFinal(data);

문 제 는 틀림없이 이 Cipher 류 에서 나 온 것 이다.
인터넷 검색 을 통 해 다음 과 같은 내용 을 찾 았 습 니 다.http://blog.csdn.net/sfdev/article/details/2188563)
. Net 환경 에서 매번 RSA 알고리즘 으로 암호 화 할 때마다 서로 다른 결 과 를 얻 을 수 있 습 니 다. 이것 은 매번 에 랜 덤 수 를 추 가 했 기 때 문 입 니 다. 사실은 이런 랜 덤 수의 생 성 도 알고리즘 기준 을 따 릅 니 다. 더욱 전문 적 인 것 은 랜 덤 충전 알고리즘 입 니 다. 예 를 들 어 NoPadding, ISO 10126 Padding, OAEPPadding, PKCS 1 Padding, PKCS5 Padding, SSL 3 Padding 등 입 니 다. 
자바 는 주로 Cipher. getInstance 를 통 해 RSA 를 실현 합 니 다. 들 어 오 는 매개 변 수 는 특정한 출력 을 만 들 기 위해 주어진 입력 에서 실 행 된 작업 (또는 한 그룹 작업) 을 설명 하 는 문자열 입 니 다.암호 화 알고리즘 의 이름 을 포함해 야 합 니 다. 뒤에 피드백 모드 와 채 우기 방안 이 있 을 수 있 습 니 다.이러한 실현 은 비교적 유연 하 다. 우 리 는 매개 변 수 를 통 해 서로 다른 피드백 모델 과 충전 방안 을 지정 할 수 있다.예 를 들 어 Cipher. getInstance ("RSA / ECB / PKCS1Padding") 나 Cipher. getInstance ("RSA") 는 모두 가능 하지만 암호 화 된 효과 도 다 를 수 있 습 니 다. 
이 를 보면 안 드 로 이 드 프로젝트 에서 getInstance 를 할 때 무 작위 충전 알고리즘 을 지정 하 는 것 이 분명 하 다.
그래서 Cipher ciper = Cipher. getInstance ("RSA");... 로 바꾸다
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
해 봐, 성 공 했 어!

좋은 웹페이지 즐겨찾기