2017-01-09 1 views
3

현재 RSA 또는 ElGamal과 같은 공개 키 암호화 시스템을 사용하는 프로그램을 작성하려고합니다. 나는 다른 소스에서 찾고있다, 내가 입수 한 가장 가까운 RSA에 대한 샘플 코드는 다소 간단 공개 키 암호화의 Bouncy Castle FIPS documentation에 있었다 : 나는 대칭 키 암호와 같은 자주 작업 한RSA 공개 키 생성 및 Java의 암호화 구현

public byte[] pkcs1Encrypt(RSAPublicKey pubKey, byte[] data) {  
    Cipher c = Cipher.getInstance(“RSA/NONE/PKCS1Padding”, “BCFIPS”); 
    c.init(Cipher.ENCRYPT_MODE, pubKey); 
    return c.doFinal(data); 
} 

AES 및 Triple-DES (DESede)로 사용했지만 Bouncy Castle 설명서를 살펴본 결과 RSAPublicKeySecretKey 클래스의 하위 인터페이스/클래스가 아닙니다.

RSAPublicKey 객체를 생성 할 수있는 방법이 있나요, 또는 탄력 성 또는 JCE

답변

1

으로 bouncycastle 문서를 암호화의이 종류를 구현하는 더 효율적인 방법은 분명히 없다이다. cipher.init(Cipher.ENCRYPT_MODE, pubKey);java.security.interfaces.RSAPublicKey의 인스턴스를 필요로하지 org.bouncycastle.asn1.pkcs.RSAPublicKey

당신은 DER 인코딩 된 데이터에서, 계수 및 지수를 사용하여 RSAPublicKey을 구축 할 수 있습니다 또는 새 키 쌍에게 당신의 답변을

//RSA public key from DER encoded data 
byte publicKeyData[] = ...; 
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyData); 
KeyFactory kf = KeyFactory.getInstance("RSA"); 
PublicKey publicKey = kf.generatePublic(keySpec); 

//RSA from modulus and exponent 
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent); 
KeyFactory kf = KeyFactory.getInstance("RSA"); 
PublicKey publicKey = kf.generatePublic(keySpec); 

//Generate a key pair using a secure random algorithm 
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); 
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); 
keyGen.initialize(2048, random); 
KeyPair pair = keyGen.generateKeyPair(); 
PrivateKey privateKey = pair.getPrivate(); 
PublicKey publicKey = pair.getPublic(); 
byte publicKeyData[] = publicKey.getEncoded(); 
+0

감사를 생성 할 수 있습니다! 내가 가진 유일한 질문은'SecureRandom' 객체를 사용하여'publickeydata' 바이트 배열을 생성하는 것입니까? – FaceFTW

+0

'publicKeyData []'는 바이너리 DER'publicKey.getEncoded()'로 인코딩 된 단지 존재하는 공개 키이다. 나는 SecureRandom을 사용하여 새로운 키 쌍을 생성하는 샘플 코드를 포함시켰다. 오라클은 RSA 공개 키와 개인 키와 같이 가치가 높고 수명이 긴 비밀을 생성 할 때 _strong 임의 알고리즘을 사용하도록 권장합니다. JDK8부터는 구현이 가능합니다. https://docs.oracle.com/javase/tutorial/security/apisign/step2.html을 참조하십시오. – pedrofb

관련 문제