Android - InvalidKeySpecException - java 尝试读取 .der 文件时出现 lang 运行时异常 SSLInternal:TOO_LONG
Android - InvalidKeySpecException - java lang runtime exception SSLInternal:TOO_LONG when trying to read .der file
我正在尝试从 der 文件中读取 私钥。我的 logcat 中出现以下错误。并且返回值为空。
java.security.spec.InvalidKeySpecException:java.lang.RuntimeException:error:0c0000af:ASN.1编码routines:OPENSSL_internal:TOO_LONG
我尝试搜索已经发生过这种情况但可以找到 none 的情况。我想知道这个错误是什么意思,我该如何解决。
这是我的代码:
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");
}
这里是 getPrivateKey();方法:
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;
}
重要说明:我将 .der 文件添加到我的资产文件夹中,然后将其保存到内部存储中的一个文件中,以便访问我的函数所需的路径。您认为在此过程中文件一定发生了什么事吗? (使用 Public 键效果很好)
果然和我猜的一样。当我将 .der 文件写入内部存储时,它以某种方式被更改,因此无法正常工作。
所以不是那个。我直接用getAssets().open(filename)返回的InputStream
读取私钥。那修好了。
我正在尝试从 der 文件中读取 私钥。我的 logcat 中出现以下错误。并且返回值为空。
java.security.spec.InvalidKeySpecException:java.lang.RuntimeException:error:0c0000af:ASN.1编码routines:OPENSSL_internal:TOO_LONG
我尝试搜索已经发生过这种情况但可以找到 none 的情况。我想知道这个错误是什么意思,我该如何解决。
这是我的代码:
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");
}
这里是 getPrivateKey();方法:
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;
}
重要说明:我将 .der 文件添加到我的资产文件夹中,然后将其保存到内部存储中的一个文件中,以便访问我的函数所需的路径。您认为在此过程中文件一定发生了什么事吗? (使用 Public 键效果很好)
果然和我猜的一样。当我将 .der 文件写入内部存储时,它以某种方式被更改,因此无法正常工作。
所以不是那个。我直接用getAssets().open(filename)返回的InputStream
读取私钥。那修好了。