我尝试在Android上编写代码以生成RSA密钥对,然后生成证书请求文件(.csr),如下图所示:
java - 在Android上读/写证书签名请求(spongycaSTLe)-LMLPHP


首先,我使用spongycastle lib生成密钥对(公钥和私钥)

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024,new SecureRandom());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
publicKey = keyPair.getPublic();
privateKey = keyPair.getPrivate();



2然后,我使用在link上找到的CSRHelper类生成:byte CSRder[]

    byte CSRder[] = csr.getEncoded();



我编写代码以将byte []写入文件:

File file;
FileOutputStream outputStream;
try
{
    file = new File(getCacheDir(),"csr.txt");
    outputStream = new FileOutputStream(file);
    outputStream.write(CSRder);
    outputStream.close();
}
catch (IOException e)
{
    e.printStackTrace();
}

最后,我编写代码以再次读取文件:

BufferedReader input = null;
File file = null;
try {
   file = new File(getCacheDir(), "csr.txt"); // Pass getFilesDir() and "MyFile" to read file

    input = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
    String line;
    StringBuffer buffer = new StringBuffer();
    while ((line = input.readLine()) != null) {
          buffer.append(line);
    }
    Log.d(TAG, buffer+"");

} catch (IOException e) {
    e.printStackTrace();
}



但是我的logcat显示不可读的字符。

    07-21 13:48:35.163 16157-16157/com.example.napoleon.test_2 D/MainActivity: 0��0���0;10Unapoleon.com10UAralink10UOrgUnit0��0 *�H��������0�������Qt��G�]�ܪ�0�'�I^�Q��[�r5ڢ_!|������ZC��~<��*o�?�d+-����)��V�<߹��m��(��ѐxDcx��NhƬF��Ҵvq+���0�Iq�-Eoe,���"0     *�H��   100U�0�0    *�H���������YPT3��?��P5MY��hs)��$1Gv�r_��76ߞ;���ҽ�޼ t�kI�I��Z��tg����O�W��Gt�=���V���#G1�$z�$�V����_^7_x�?�0�׵#�;��f?�


如何将此csr字节写入文件并再次读取?
感谢前进。

最佳答案

CSRder是二进制的,您不能将其读取为字符串,因为它具有不可打印的字符。

由于您需要.csr文件的PEM格式,因此需要将二进制内容转换为base64并添加PEM标头和页脚

----BEGIN CERTIFICATE REQUEST-----
(base64)
----END CERTIFICATE REQUEST-----


可以手动完成此操作,也可以使用海绵宝宝的PEMWriter

StringWriter writer = new StringWriter();
PemWriter pemWriter = new PemWriter(writer);
pemWriter.writeObject(new PemObject("CERTIFICATE REQUEST", CSRder));
pemWriter.flush();
pemWriter.close();
String csrPEM = writer.toString();


之后,您可以将csrPEM另存为字符串文件。

关于java - 在Android上读/写证书签名请求(spongycaSTLe),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45230871/

10-09 09:33