>  기사  >  Java  >  파일에서 RSA 개인 키를 로드하고 \"InvalidKeySpecException\"을 방지하는 방법은 무엇입니까?

파일에서 RSA 개인 키를 로드하고 \"InvalidKeySpecException\"을 방지하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-25 03:36:30943검색

How to Load an RSA Private Key from a File and Avoid the

파일에서 RSA 개인 키를 로드하는 방법

Java에서 RSA 개인 키를 사용하여 작업할 때 로드해야 하는 경우가 많습니다. 파일에서. 이는 java.security 패키지를 사용하여 수행할 수 있습니다. 그러나 이 프로세스 중에 오류가 발생할 수도 있습니다.

일반적인 오류 중 하나는 다음과 같습니다.

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format

이는 일반적으로 개인 키 파일의 형식이 올바른 것이 아님을 나타냅니다. 개인 키는 PKCS8 형식이어야 합니다.

개인 키를 PKCS8 형식으로 변환하려면 다음 명령을 사용하면 됩니다.

openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key_file  -nocrypt > pkcs8_key

이 명령을 실행하면 변환된 개인 키가 pkcs8_key 파일에 저장됩니다. 그런 다음 다음 코드를 사용하여 이 파일을 Java 프로그램에 로드할 수 있습니다.

<code class="java">import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.InvalidKeySpecException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;

public class LoadRsaPrivateKeyFromFile {

    public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
        // Read the converted private key file
        byte[] keyBytes = Files.readAllBytes(Paths.get("pkcs8_key"));

        // Create a PKCS8EncodedKeySpec to wrap the key bytes
        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);

        // Create a KeyFactory to generate the private key
        KeyFactory factory = KeyFactory.getInstance("RSA");

        // Generate the private key
        PrivateKey privateKey = factory.generatePrivate(spec);
        
        // Use the private key to sign a message
        // ...
    }
}</code>

위 내용은 파일에서 RSA 개인 키를 로드하고 \"InvalidKeySpecException\"을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.