简体   繁体   English

Android 上的读/写证书签名请求 (spongycastle)

[英]Read/Write Certificate Signing Request on Android (spongycastle)

I try to write code on Android to generate RSA key-pair and then generate Certificate Request file (.csr) like this image below:我尝试在 Android 上编写代码以生成 RSA 密钥对,然后生成证书请求文件 (.csr),如下图所示:

在此处输入图片说明

  1. First I use spongycastle lib to generate Key Pair (public key and private key)首先我使用 spongycastle lib 生成密钥对(公钥和私钥)

     KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(1024,new SecureRandom()); KeyPair keyPair = keyPairGenerator.generateKeyPair(); publicKey = keyPair.getPublic(); privateKey = keyPair.getPrivate();
  2. Then I use CSRHelper class I found on this link to generate: byte CSRder[] :然后我使用我在这个链接上找到的CSRHelper类来生成: byte CSRder[]

     byte CSRder[] = csr.getEncoded();
  3. I write code to write byte[] to file:我编写代码将字节 [] 写入文件:

     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(); }
  4. Final I write code to read file again:最后我编写代码再次读取文件:

     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(); }

But my logcat show unreadable character.但是我的 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?�

How to write this csr byte to file and read again?如何将此 csr 字节写入文件并再次读取?

CSRder is binary, you can not read it as string because it has non-printable characters. CSRder是二进制的,您不能将其作为字符串读取,因为它具有不可打印的字符。

Since you require PEM format for .csr file, it is needed to convert the binary content to base64 and add the PEM header and footer由于.csr文件需要 PEM 格式,因此需要将二进制内容转换为 base64 并添加 PEM 页眉和页脚

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

This can be done manually or using spongycastle's PEMWriter这可以手动完成,也可以使用 spongycastle 的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();

After this, you can save csrPEM as string file.之后,您可以将csrPEM保存为字符串文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM