2017-11-17 6 views
0

Ich versuche, einen privaten Schlüssel aus einer der Datei zu lesen. Ich erhalte den folgenden Fehler in meinem Logcat. Und der zurückgegebene Wert ist leer.Android - InvalidKeySpecException - Java-Laufzeitausnahme SSLInternal: TOO_LONG beim Versuch, .der Datei zu lesen

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: Fehler: 0c0000af: ASN.1-Codierung Routinen: OPENSSL_internal: TOO_LONG

habe ich versucht, für Situationen suchen, wo dies bereits geschehen war, konnte aber finden keiner. Ich würde gerne wissen, was dieser Fehler bedeutet und wie ich ihn lösen kann.

Hier ist mein Code:

public static String decryptionWithFile(String encrypted,String privateFile2)throws Exception { 
    PrivateKey privateKey = getPrivateKey(privateFile2); 

    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
    cipher.init(Cipher.DECRYPT_MODE, privateKey); 
    byte[] bts = Hex.decodeHex(encrypted.toCharArray()); 
    bts = cipher.doFinal(bts); 


    bts = getFinalBytesOfDycryptedString(bts); 
    String decryptedMessage = new String(cipher.doFinal(encrypted.getBytes())); 
    return new String(bts,"UTF-8"); 
} 

Und hier ist das getPrivateKey(); Methode:

private static PrivateKey getPrivateKey(String privateFile2)throws Exception { 
    File f = new File(privateFile2); 
    FileInputStream fis = new FileInputStream(f); 
    DataInputStream dis = new DataInputStream(fis); 
    byte[] keyBytes = new byte[(int) f.length()]; 
    dis.readFully(keyBytes); 
    dis.close(); 
    KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
    PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes); 
    RSAPrivateKey privKey = (RSAPrivateKey) keyFactory.generatePrivate(spec); 
    return privKey; 
} 

Wichtiger Hinweis: Ich habe die .der-Datei auf mein Vermögen Ordner und gespeichert es dann in eine Datei in interner Speicher, um den Weg für den Zugriff auf - die meine Funktion erfordert. Denken Sie, dass während dieses Vorgangs irgendetwas mit der Datei passiert sein muss? (Es funktionierte gut mit dem Public Key)

+0

Erhalten Sie den privaten Schlüssel korrekt aus der Datei. Haben Sie es durch Drucken im Protokoll überprüft? –

Antwort

0

Das Problem stellte sich heraus, was ich erraten hatte. Als ich die .der-Datei in den internen Speicher schrieb, wurde sie irgendwie verändert und funktionierte nicht mehr.

Also statt dessen. Ich habe direkt InputStream verwendet, die von getAssets() zurückgegeben wurde, um den privaten Schlüssel zu lesen. Das hat es behoben.

Verwandte Themen