> Java > java지도 시간 > 본문

'InvalidKeySpecException'이 발생할 때 PEM 인코딩 파일에서 RSA 개인 키를 추출하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-11-10 10:28:02
원래의
758명이 탐색했습니다.

How do I extract an RSA private key from a PEM encoded file when encountering an

PEM 인코딩 파일에서 RSA 개인 키 추출

문제:
개인 키 파일이 인코딩되어 있습니다. PEM BASE64 형식이고 외부 컨텍스트에서 사용하려고 합니다. 그러나 키를 디코딩하는 동안 오류가 발생했습니다.

코드 조각 및 오류:
개인 키를 읽고 BASE64 데이터를 디코딩하기 위한 Java 코드 조각:

// Code omitted for brevity
로그인 후 복사

발생한 오류:

InvalidKeySpecException: Inappropriate key specification: DerInputStream.getLength(): lengthTag=127, too big.
로그인 후 복사

해결책:

오류는 키가 PKCS#1 형식임을 나타냅니다. 코드에서 대상으로 지정된 PKCS#8 형식입니다. 다음은 이 문제를 해결하는 수정된 솔루션입니다.

import sun.security.util.DerInputStream;
import sun.security.util.DerValue;

// Code omitted for brevity

public static PrivateKey pemFileLoadPrivateKeyPkcs1OrPkcs8Encoded(File pemFileName) throws GeneralSecurityException, IOException {
    // PKCS#8 format
    final String PEM_PRIVATE_START = "-----BEGIN PRIVATE KEY-----";
    final String PEM_PRIVATE_END = "-----END PRIVATE KEY-----";

    // PKCS#1 format
    final String PEM_RSA_PRIVATE_START = "-----BEGIN RSA PRIVATE KEY-----";
    final String PEM_RSA_PRIVATE_END = "-----END RSA PRIVATE KEY-----";

    Path path = Paths.get(pemFileName.getAbsolutePath());

    String privateKeyPem = new String(Files.readAllBytes(path));

    if (privateKeyPem.indexOf(PEM_PRIVATE_START) != -1) { // PKCS#8 format
        // Code omitted for brevity
    } else if (privateKeyPem.indexOf(PEM_RSA_PRIVATE_START) != -1) {  // PKCS#1 format
        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);

        // Code omitted for brevity
    }

    throw new GeneralSecurityException("Not supported format of a private key");
}
로그인 후 복사

이 업데이트된 코드는 PKCS#8 및 PKCS#1 형식을 모두 처리하므로 개인 키를 성공적으로 추출하고 원하는 용도로 사용할 수 있습니다.

위 내용은 'InvalidKeySpecException'이 발생할 때 PEM 인코딩 파일에서 RSA 개인 키를 추출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿