簡體   English   中英

Android 上的讀/寫證書簽名請求 (spongycastle)

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

我嘗試在 Android 上編寫代碼以生成 RSA 密鑰對,然后生成證書請求文件 (.csr),如下圖所示:

在此處輸入圖片說明

  1. 首先我使用 spongycastle lib 生成密鑰對(公鑰和私鑰)

     KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(1024,new SecureRandom()); KeyPair keyPair = keyPairGenerator.generateKeyPair(); publicKey = keyPair.getPublic(); privateKey = keyPair.getPrivate();
  2. 然后我使用我在這個鏈接上找到的CSRHelper類來生成: byte CSRder[]

     byte CSRder[] = csr.getEncoded();
  3. 我編寫代碼將字節 [] 寫入文件:

     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. 最后我編寫代碼再次讀取文件:

     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-----

這可以手動完成,也可以使用 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();

之后,您可以將csrPEM保存為字符串文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM