PEM으로 인코딩된 개인 키 파일에서 RSA 개인 키 가져오기
이 경우 제공된 개인 키는 PEM 형식으로 인코딩됩니다. , 특히 PKCS#1을 사용합니다. 이 PEM 인코딩 파일에서 RSA 개인 키를 검색하려면 다음 접근 방식 중 하나를 활용할 수 있습니다.
접근 방법 1: DER 시퀀스 구문 분석을 사용하여 수정된 코드
제공된 Java 코드는 PEM으로 인코딩된 키를 읽고 디코딩을 시도합니다. 아래 제안된 수정 사항을 사용하면 PKCS#1 형식 개인 키를 구문 분석할 수 있습니다.
... // Skip version seq[0]; BigInteger modulus = seq[1].getBigInteger(); BigInteger publicExp = seq[2].getBigInteger(); BigInteger privateExp = seq[3].getBigInteger(); ... RSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(modulus, publicExp, privateExp, prime1, prime2, exp1, exp2, crtCoef); KeyFactory factory = KeyFactory.getInstance("RSA"); return factory.generatePrivate(keySpec); ...
접근 방법 2: Sun 공급자를 사용하여 코드 개선
대체 솔루션은 다음과 같습니다. DER 시퀀스 구문 분석을 위해 sun.security 공급자를 활용하고 키 생성을 위해 java.security 패키지를 활용합니다. 이 접근 방식은 보다 간결하고 FIPS 호환 구현을 제공합니다.
import java.io.File; import java.io.IOException; import java.security.GeneralSecurityException; import java.security.PrivateKey; public static PrivateKey pemFileLoadPrivateKeyPkcs1(File pemFileName) throws GeneralSecurityException, IOException { // PKCS#1 format String PEM_RSA_PRIVATE_START = "-----BEGIN RSA PRIVATE KEY-----"; String PEM_RSA_PRIVATE_END = "-----END RSA PRIVATE KEY-----"; Path path = Paths.get(pemFileName.getAbsolutePath()); String privateKeyPem = new String(Files.readAllBytes(path)); privateKeyPem = privateKeyPem.replace(PEM_RSA_PRIVATE_START, "").replace(PEM_RSA_PRIVATE_END, ""); privateKeyPem = privateKeyPem.replaceAll("\s", ""); DerInputStream derReader = new DerInputStream(Base64.getDecoder().decode(privateKeyPem)); DerValue[] seq = derReader.getSequence(0); if (seq.length < 9) { throw new GeneralSecurityException("Could not parse a PKCS1 private key."); } // Skip version seq[0]; BigInteger modulus = seq[1].getBigInteger(); BigInteger publicExp = seq[2].getBigInteger(); BigInteger privateExp = seq[3].getBigInteger(); BigInteger prime1 = seq[4].getBigInteger(); BigInteger prime2 = seq[5].getBigInteger(); BigInteger exp1 = seq[6].getBigInteger(); BigInteger exp2 = seq[7].getBigInteger(); BigInteger crtCoef = seq[8].getBigInteger(); RSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(modulus, publicExp, privateExp, prime1, prime2, exp1, exp2, crtCoef); KeyFactory factory = KeyFactory.getInstance("RSA"); return factory.generatePrivate(keySpec); }
이 코드는 제공된 PEM 파일에서 개인 키를 성공적으로 읽고 구문 분석하며 RSA 개인 키 개체를 제공합니다.
위 내용은 PEM 인코딩 파일에서 RSA 개인 키를 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!