从文件中恢复公钥和私钥并使用它(Android)

Posted

技术标签:

【中文标题】从文件中恢复公钥和私钥并使用它(Android)【英文标题】:Recovering public and private keys from a file and using it (Android) 【发布时间】:2012-10-10 14:04:59 【问题描述】:

当我尝试使用文件中的密钥进行加密和解密时遇到了一些问题。

这是我的代码中存在问题的部分:

   //**The main function:**

File inputfile = new File(fileToEncrypt); // I receive fileToEncrypt for the function.

try 
    inputbytes = readFromFile(inputfile);
 

catch (IOException e) 
    Toast.makeText(this, "ERROR READING", Toast.LENGTH_LONG).show();


byte[] outputbytes = rsaEncrypt(inputbytes, raiz.getAbsolutePath()+"/PublicKeyFile.key");
byte[] inputbytes = rsaDecrypt(outputbytes, raiz.getAbsolutePath()+"/Privada.key");


    //**Used functions**

    public byte[] rsaEncrypt(byte[] src, String direccion) 
    try 
        File archivo_llave_publica = new File(direccion);
        byte[] bytes_llave = leer(archivo_llave_publica);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");          
        EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(bytes_llave);
        PublicKey pubKey = keyFactory.generatePublic(publicKeySpec);
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        byte[] cipherData = cipher.doFinal(src);
        return cipherData;
     catch (Exception e) 
        Toast.makeText(this, "Error encriptando!!", Toast.LENGTH_LONG).show();
    
    Toast.makeText(this, "ERROR ENCRYPT!", Toast.LENGTH_LONG).show();
    return null;


public byte[] rsaDecrypt(byte[] src, String direccion) 
    try 
        File archivo_llave_privada = new File(direccion);
        byte[] bytes_llave = leer(archivo_llave_privada);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");          
        EncodedKeySpec privateKeySpec = new X509EncodedKeySpec(bytes_llave);
        PrivateKey priKey = keyFactory.generatePrivate(privateKeySpec);
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, priKey);
        byte[] cipherData = cipher.doFinal(src);
        return cipherData;
     catch (Exception e) 
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
    
    return null;


public byte[] readFromFile(File archivo) throws IOException           
    FileInputStream lector = new FileInputStream(archivo);
    long length = archivo.length();
    byte[] input = new byte[(int) length];
    for (int i=0; i<(int)length; i++)
    
        input[i]=(byte) lector.read();
    
    lector.close();
        return input;
 

它给我一个解密错误...如果你发现我的错误请告诉我。谢谢!

【问题讨论】:

请也发布错误消息,以便有人可以提供帮助。 让它成为完整的堆栈跟踪,而不仅仅是消息本身。 我已经修好了 :) 问题是编码类型解密。它是 PKCS8 而不是 X509。 【参考方案1】:

问题是编码类型解密。它是 PKCS8 而不是 X509。

【讨论】:

以上是关于从文件中恢复公钥和私钥并使用它(Android)的主要内容,如果未能解决你的问题,请参考以下文章

各种格式SSH 公钥和私钥之间的转换

从jks证书中提取公钥和私钥(jks证书转pem证书)

iOS RSA加密生成公钥私钥

关于RSA中公钥和私钥的具体使用情况区分

java中RSA用私钥加密公钥解密问题

如何从苹果全球开发者证书和 .p12 文件中提取公钥和私钥?