2016-12-01 5 views
1

Ich habe RSA öffentlichen und privaten Schlüssel in zwei verschiedenen Dateien. Das habe ich bisher gemacht.verschlüsseln AES-Schlüssel mit RSA öffentlichen Schlüsseldatei in Java

public SecretKey getAESkey() throws Exception, NoSuchAlgorithmException{   
     KeyGenerator generator = KeyGenerator.getInstance("AES"); 
     generator.init(128); 
     SecretKey sKey = generator.generateKey(); 
     return sKey; // will be passed to encryptSecretKey method 
    } 

    public byte[] encryptSecretKey (SecretKey sKey) 
    { 
     Cipher cipher = null; 
     byte[] key = null; 

     try 
     { 
     // initialize the cipher with the user's public key 
     cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE, keyHolder.keyPair.getPublic()); 
     key = cipher.doFinal(sKey.getEncoded()); 
     } 
     catch(Exception e) 
     { 
     e.printStackTrace(); 
     } 
     return key; 
    } 

Ich habe es falsch gemacht. Ich habe ein Objekt (keyHolder) erstellt, das den öffentlichen und den privaten Schlüssel enthält. Und ich versuche, Zugang zu seinem öffentlichen Schlüssel zu haben, indem ich getPublic() Methode aufrufe. Stattdessen möchte ich direkt auf meine öffentliche Schlüsseldatei zugreifen und ihren Byte-Stream lesen, um meinen AES-Schlüssel zu verschlüsseln. Wie mache ich das?

Antwort

0

Um den öffentlichen RSA-Schlüssel zu speichern, rufen Sie einfach PublicKey.getEncoded() auf, der ein Byte-Array zurückgibt.

Um den öffentlichen RSA-Schlüssel abrufen Sie eine Instanz eines KeyFactory des Typs verwenden würde "RSA" und erzeugen den öffentlichen Schlüssel eines X509EncodedKeySpec verwenden, die die gleiche Byte-Array akzeptiert.

Der Rest ist nur normale binäre Datei I/O.


Der Schlüssel wird in X509-Zertifikat Strukturen (daher der Name des X509EncodedKeySpec), wie verwendet in einem DER codierten SubjectPublicKeyInfo Struktur gespeichert werden. Der PKCS # 1-kompatible RSA Public Key ist in diese Struktur eingebettet. Die zusätzliche Information wird verwendet, um den spezifischen Schlüsseltyp anzuzeigen.

Sie können openssl asn1parse -inform DER -in <publickey.der> verwenden, um den Inhalt der Datei anzuzeigen.

Verwandte Themen