Heim  >  Artikel  >  Java  >  Wie lade ich einen privaten RSA-Schlüssel aus einer Datei und vermeide die „InvalidKeySpecException“?

Wie lade ich einen privaten RSA-Schlüssel aus einer Datei und vermeide die „InvalidKeySpecException“?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 03:36:30943Durchsuche

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

So laden Sie einen privaten RSA-Schlüssel aus einer Datei

Bei der Arbeit mit privaten RSA-Schlüsseln in Java ist es häufig erforderlich, diese zu laden aus einer Datei. Dies kann mit dem Paket java.security erfolgen. Bei diesem Vorgang können jedoch manchmal Fehler auftreten.

Ein häufiger Fehler ist:

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

Dies weist normalerweise darauf hin, dass die private Schlüsseldatei nicht das richtige Format hat. Der private Schlüssel muss im PKCS8-Format vorliegen.

Um Ihren privaten Schlüssel in das PKCS8-Format zu konvertieren, können Sie den folgenden Befehl verwenden:

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

Nach der Ausführung dieses Befehls wird der konvertierte private Schlüssel in der Datei pkcs8_key gespeichert. Anschließend können Sie diese Datei mit dem folgenden Code in Ihr Java-Programm laden:

<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>

Das obige ist der detaillierte Inhalt vonWie lade ich einen privaten RSA-Schlüssel aus einer Datei und vermeide die „InvalidKeySpecException“?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn