[英]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),如下图所示:
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();
Then I use CSRHelper
class I found on this link to generate: byte CSRder[]
:然后我使用我在这个链接上找到的
CSRHelper
类来生成: byte CSRder[]
:
byte CSRder[] = csr.getEncoded();
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(); }
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.