2012-04-22 4 views
0

BigInteger를 인터페이스 키로 변환 할 수 있습니까? BigInteger to Key

http://docs.oracle.com/javase/7/docs/api/java/security/Key.html

은 내가 RSA 알고리즘을 구현하기 위해 노력하고, 그리고 키 자신의 KeyPairGenerator를 사용하는 대신 운영 체제를 생성하고있다. 그러나 Cipher를 사용하여 메시지를 암호화 할 때 Key가 필요합니다. BigInteger를 Key로 캐스팅하려고했지만이 작업은하지 못했습니다.

+1

예, 가능합니다. –

+0

사과 - 질문에 대한 자세한 내용을 추가했습니다. – Joseph

+1

물론, 'Key'는 'BigInteger'가 아니므로 캐스팅 할 수 없습니다. Java에서의 캐스트는 변환 연산자가 아닙니다 (기본 유형 제외). 여러분은 인스턴스화하고자하는'Key '를 구현하는 정확한 구체적인 클래스를 알아야 할 것입니다. 이것은 아마도 여러분의 연구의 시작일 것입니다. –

답변

0

다음은 모듈 및 공개 지수에서 RSAPublicKey 구현을 만드는 예제입니다.

KeyFactory factory rsa = KeyFactory.getInstance("RSA"); 
BigInteger n = ... ; /* modulus */ 
BigInteger e = ... ; /* public exponent */ 
RSAPublicKeySpec spec = new RSAPublicKeySpec(n, e); 
RSAPublicKey pub = (RSAPublicKey) factory.generatePublic(spec); 
Cipher enc = Cipher.getInstance("RSA"); 
enc.init(Cipher.WRAP_MODE, pub); 
byte[] encryptedContentKey = enc.wrap(secret); 

RSA 키 쌍 BigInteger 객체의 형태로 여러 숫자를 포함하는 각각의 개인 키 및 공개 키이다. 한 쌍의 각 키는 동일한 "모듈"을 공유합니다. 공개 키에는 "공개 지수"가 있고 개인 키에는 "개인 지수"가 있습니다. 계산 효율성을 위해 개인 키는 일반적으로 "중국어 잉여 정리 형식"으로 저장되며 추가 숫자가 포함됩니다.

암호화하는 경우 PublicKey을 의 init() 방법으로 전달해야합니다.

해독하는 경우 Cipherinit() 방법으로 PrivateKey을 전달해야합니다.

합니다 ( Signature 클래스는 더 명확하게 의도를 표현 할 때 일부 제공 업체는 사용자가 키를 반대 할 때 서명 작업을 수행하고 올바른 패딩을 사용하기 위해 Cipher을 사용할 수 있지만, 이것은 필요 권장하거나하지 않습니다.)

관련 문제