Bouncy Castle 是產生 PEM file 非常好用的一個工具

官方網站:https://www.bouncycastle.org/

先來看一下 PEM 的檔案格式長什麼樣子

以下是一個 Https 網頁常見的簽證格式

Host:172.0.0.1
Email:abc@xxx.com

-----BEGIN CERTIFICATE-----
MIICCTCCAXICCQCPqYJZEjob6DANBgkqhkiG9w0BAQUFADBJMRcwFQYDVQQKEw5B
cGFjaGUgRnJpZW5kczEaMBgGA1UECxMRWEFNUFAgZm9yIFdpbmRvd3MxEjAQBgNV
BAMTCWxvY2FsaG9zdDAeFw0wNTEyMDQxNTExMDRaFw0wNjEyMDQxNTExMDRaMEkx
FzAVBgNVBAoTDkFwYWNoZSBGcmllbmRzMRowGAYDVQQLExFYQU1QUCBmb3IgV2lu
ZG93czESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQCokQtpTxjawSmarLHVs67vkqerzA1XxBXqt5vcwoTOPipBIewpovzjYhao
D0/QZUubUdxjoozt4gb4EjFQI5HijMCtc4NHtQLLrlT4LZ1I3EUn2FxdbxX9L5ka
Lr7BkbqvtTyDt1LPpOjDdFFiIpYoX+8EqdNo37zEAtpzk/VZLwIDAQABMA0GCSqG
SIb3DQEBBQUAA4GBAB0fNNgL/9/ecVkKwps6xm+vl5Nady6bAA+fMuCHt4qgEE6C
NwDK4dQ2FpDNo2LcZybmjfcU4l6NPIxEUY6edgNC3EK2UsnbF7fN8g38pP/3/5r7
tRGeWD7Ew6Cj+Gr01AMvZYSV31L/HJKpNdtndD531jrYbTsIKDSbhicxkudF
-----END CERTIFICATE-----

www.abc.com.tw

通常在網路上抓下來的簽證通常只會有 BEGIN 到 END 中間這個區塊的資料

在頁首及頁尾可辨視的資料較類似於註解功能

除非有特別協議在頁首或頁尾放驗證資料否則通常都是空的

對於一個 PEM 檔最重要的是 -----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 的部份

其中資料包含了驗證用的加密字串、CA 及 Server 的相關資訊

在程式設計中有時會需要存一些加密的檔案,像是 RSA Key、AES Key 等等

雖然 Key 在產生時也可以直接寫進檔案中,將它讀出來還是可以使用

但在資料交換時就必需跟對方說明你的檔案格式

那既然有一個公開的標準格式,那交換時就不用說明這麼多了,不用白不用啊

下面是利用 Bouncy Castle 產生 PEM 格式檔的程式

PemWriter pw = new PemWriter(new OutputStreamWriter(new FileOutputStream("File Path")));
PemObject po = new PemObject("TEST", data.getBytes());
pw.writeObject(po);
pw.close();

程式中的 "TEST" 字串其實就是上面 PEM 檔案內容的 "CERTIFICATE" ,這個部份是可以自訂的,內容不影響程式及驗證(不能換行)

另外也可以在 .writeObject 前後使用 .append(" ...... ") 加入頁首及頁尾

下面是讀取 PEM 格式檔的程式

PemReader pr = new PemReader(new InputStreamReader(new FileInputStream("File Path")));
PemObject po = pr.readPemObject();
pr.close();

取得之後就可以利用 .getHeader 及 .getContent 取得內容了

.getContent 取得的資料是不包含 -----BEGIN ......----- 及 -----END ......----- 的

另外 PemObject 在讀寫的時候都會自動做 Base64 的轉換

也就是說在轉 Base64 之前直接丟進 PemObject 就可以了

小心不要多轉了一次 Base64 導至資料不知道怎麼轉回來

arrow
arrow
    全站熱搜

    taurus770423 發表在 痞客邦 留言(0) 人氣()