Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在读取.key文件_Android_File - Fatal编程技术网

Android 正在读取.key文件

Android 正在读取.key文件,android,file,Android,File,我在尝试读取.key文件时遇到问题。这个文件是由普通java(J2SE)创建的,我从android应用程序读取它。当我从android读取这个文件时,它什么也没有给我,我做了一些调试,我注意到它无法读取该文件。此外,我还检查了是否可以读取该文件(使用file.canRead()),但似乎无法读取。请注意,我用相同的代码创建了普通java应用程序(J2SE),并且它成功地工作了 我使用的代码如下: public KeyPair LoadKeyPair(String algorithm, S

我在尝试读取.key文件时遇到问题。这个文件是由普通java(J2SE)创建的,我从android应用程序读取它。当我从android读取这个文件时,它什么也没有给我,我做了一些调试,我注意到它无法读取该文件。此外,我还检查了是否可以读取该文件(使用
file.canRead())
,但似乎无法读取。请注意,我用相同的代码创建了普通java应用程序(J2SE),并且它成功地工作了

我使用的代码如下:

    public KeyPair LoadKeyPair(String algorithm, String publicFileName, String privateFileName) {
    // Read Public Key.
    PublicKey publicKey = null;
    PrivateKey privateKey = null;
    try {
    File filePublicKey = new File(publicFileName);
    FileInputStream fis = new FileInputStream(publicFileName); // The program stops here
    byte[] encodedPublicKey = new byte[(int) filePublicKey.length()];
    fis.read(encodedPublicKey);
    fis.close();

// Read Private Key.
File filePrivateKey = new File(privateFileName);
fis = new FileInputStream(privateFileName);
byte[] encodedPrivateKey = new byte[(int) filePrivateKey.length()];
fis.read(encodedPrivateKey);
fis.close();

// Generate KeyPair.
KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(
encodedPublicKey);
publicKey = keyFactory.generatePublic(publicKeySpec);

PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(
encodedPrivateKey);
privateKey = keyFactory.generatePrivate(privateKeySpec);

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new KeyPair(publicKey, privateKey);
}

.key文件和.pem文件一样吗

如果是这样的话,我就这样做,因为PemReader在BouncyCastleProvider中,那真是一团糟!代码太多,我想用的东西太少

if(mKey==null){
        BufferedReader pubFile = new BufferedReader(new InputStreamReader(mCtx.getResources().openRawResource(R.raw.public.pem)));
        try {
            String line = new String();
            StringBuilder key = new StringBuilder();
            while((line = pubFile.readLine())!= null){
                if(!line.contains("----")){
                    key.append(line);
                }
            }
            mKey = key.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                pubFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
如您所见,我的public.pem位于应用程序的res/raw/文件夹中。当然,我没有带私钥的.pem。我用我的公钥签名,并验证信息是用我在服务器上保留的私钥生成的公钥签名的


希望这能回答您的问题并且足够清楚。

是一个.key文件,就像.pem文件一样吗

如果是这样的话,我就这样做,因为PemReader在BouncyCastleProvider中,那真是一团糟!代码太多,我想用的东西太少

if(mKey==null){
        BufferedReader pubFile = new BufferedReader(new InputStreamReader(mCtx.getResources().openRawResource(R.raw.public.pem)));
        try {
            String line = new String();
            StringBuilder key = new StringBuilder();
            while((line = pubFile.readLine())!= null){
                if(!line.contains("----")){
                    key.append(line);
                }
            }
            mKey = key.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                pubFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
如您所见,我的public.pem位于应用程序的res/raw/文件夹中。当然,我没有带私钥的.pem。我用我的公钥签名,并验证信息是用我在服务器上保留的私钥生成的公钥签名的


希望这能回答您的问题并且足够清楚。

您是否在清单中添加了以下行

<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>

您是否在清单中添加了以下行

<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>


您从哪里读取文件?SDcard?它在android应用程序的同一目录中。您从哪里读取文件?SDcard?它位于android应用程序的同一目录中,其中是android.permission.READ\u INTERNAL\u STORAGE documentd。我在Manifets.permission中找不到它。如果该行不存在,则需要在清单中添加该行。该权限不存在(请参阅此处的所有现有权限:)。但是,请注意,从API 16开始就存在READ_外部_存储。其中是android.permission.READ_内部_存储文档。我在Manifets.permission中找不到它。如果该行不存在,则需要在清单中添加该行。该权限不存在(请参阅此处的所有现有权限:)。但是,请注意,自API 16以来就存在读取外部存储。