第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

以文本格式存儲(chǔ)由 KeyStoreGenerator 生成的私鑰(例如保管庫(kù)存儲(chǔ))-Java

以文本格式存儲(chǔ)由 KeyStoreGenerator 生成的私鑰(例如保管庫(kù)存儲(chǔ))-Java

慕妹3242003 2021-10-13 12:50:10
出于安全目的,我正在使用以下代碼創(chuàng)建公鑰和私鑰。public KeyGenerator(int keylength) throws NoSuchAlgorithmException, NoSuchProviderException {    this.keyGen = KeyPairGenerator.getInstance("RSA");    this.keyGen.initialize(keylength);}public void createKeys() {    this.pair = this.keyGen.generateKeyPair();    this.privateKey = pair.getPrivate();    this.publicKey = pair.getPublic();}public PrivateKey getPrivateKey() {    return this.privateKey;}public PublicKey getPublicKey() {    return this.publicKey;}public void writeToFile(String path, byte[] key) throws IOException {    File f = new File(path);    f.getParentFile().mkdirs();    FileOutputStream fos = new FileOutputStream(f);    fos.write(key);    fos.flush();    fos.close();}public static void main(String[] args) {    KeyGenerator kg;    try {        kg = new KeyGenerator(2048);        kg.createKeys();        System.out.println(kg.getPublicKey().getFormat()); // this prints out X.509        System.out.println(kg.getPrivateKey().getFormat()); // this prints out PKCS#8        kg.writeToFile(PUBLIC_KEY_PATH, kg.getPublicKey().getEncoded());        kg.writeToFile(PRIVATE_KEY_PATH, kg.getPrivateKey().getEncoded());    } catch (NoSuchAlgorithmException | NoSuchProviderException e) {        System.err.println(e.getMessage());    } catch (IOException e) {        System.err.println(e.getMessage());    }}我需要找到一種方法將私鑰(如下圖所示)按以下格式存儲(chǔ)在保管庫(kù)中。當(dāng)我用文本編輯器打開(kāi)密鑰時(shí),我得到如下內(nèi)容。有沒(méi)有辦法將此 PKCS#8 轉(zhuǎn)換為適合存儲(chǔ)在文件中的編碼?
查看完整描述

2 回答

?
30秒到達(dá)戰(zhàn)場(chǎng)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊

請(qǐng)注意,關(guān)于getFormat Javadoc,這是 ASN.1 標(biāo)準(zhǔn)格式:


返回此鍵的主要編碼格式的名稱,如果此鍵不支持編碼,則返回 null。如果此密鑰的 ASN.1 規(guī)范存在,則主要編碼格式根據(jù)適當(dāng)?shù)?ASN.1 數(shù)據(jù)格式命名。例如,公鑰的ASN.1數(shù)據(jù)格式的名稱是SubjectPublicKeyInfo,由X.509標(biāo)準(zhǔn)定義;在這種情況下,返回的格式是“X.509”。同樣,私鑰的 ASN.1 數(shù)據(jù)格式的名稱是 PrivateKeyInfo,由 PKCS #8 標(biāo)準(zhǔn)定義;在這種情況下,返回的格式是“PKCS#8”。


但是,如果我們出于某種原因需要更改它,我們可以使用 Bouncy Castle:例如:


  //Convert to PKCS#1

  PrivateKeyInfo pkInfo = PrivateKeyInfo.getInstance(kg.getPrivateKey().getEncoded());

  ASN1Encodable encodable = pkInfo.parsePrivateKey();

  ASN1Primitive primitive = encodable.toASN1Primitive();

  byte[] privateKeyPKCS1 = primitive.getEncoded();

  //kg.writeToFile(PRIVATE_KEY_PATH, privateKeyPKCS1);


  //Convert to PEM

  PemObject pemObject = new PemObject("RSA PRIVATE KEY", privateKeyPKCS1);

  StringWriter stringWriter = new StringWriter();

  PemWriter pemWriter = new PemWriter(stringWriter);

  pemWriter.writeObject(pemObject);

  pemWriter.close();

  String pemString = stringWriter.toString();

  kg.writeToFile(PRIVATE_KEY_PATH, pemString.getBytes());

我們會(huì)得到一個(gè)這樣的文件:


-----BEGIN RSA PRIVATE KEY----- 

MIIEpQIBAAKCAQEAr76DpCYkQKMCKRyjx9wyVKihU4vSBeTq7VpkJx9g616AUTtI

yzMZyHa2vVucgkZL9VFS+ZwJZk7b6pNUUSwnwKxHFnRndid2Hum1ZZZCzRYwhsKq

. . . 

XIA+HTgaXbEsCyDcX7EWVlpnTzq5ASO2llKT8V0Mswyh2fznbm5nH92fUKUku2nL 

VAQC2f8PL2eLec3wmb0ZWBazadakMC1fVH3umiBmFnkyDoEfojdOgSo=

-----END RSA PRIVATE KEY-----

我使用了這個(gè) BouncyCastle 版本:


<dependency>

  <groupId>org.bouncycastle</groupId>

  <artifactId>bcprov-jdk15on</artifactId>

  <version>1.60</version>

</dependency>

這個(gè)問(wèn)題討論了同樣的問(wèn)題,但對(duì)于公鑰編碼:Generating RSA keys in PKCS#1 format in Java


感謝@dave_thompson_085 的評(píng)論,我意識(shí)到使用JcaMiscPEMGenerator類的另一種方法


  JcaMiscPEMGenerator generator = new JcaMiscPEMGenerator(kg.getPrivateKey());

  stringWriter = new StringWriter();

  pemWriter = new PemWriter(stringWriter);

  pemWriter.writeObject(generator.generate());

  pemWriter.close();

  pemString = stringWriter.toString();

  kg.writeToFile(PRIVATE_KEY_PATH, pemString.getBytes());

要使用它,我們需要添加以下依賴項(xiàng):


<dependency>

  <groupId>org.bouncycastle</groupId>

  <artifactId>bcpkix-jdk15on</artifactId>

  <version>1.60</version>

</dependency>


查看完整回答
反對(duì) 回復(fù) 2021-10-13
?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

現(xiàn)在我已經(jīng)花了幾個(gè)小時(shí),我覺(jué)得很愚蠢..我會(huì)把答案放在這里。

所以問(wèn)題是我想將其存儲(chǔ)為字符串(在文本文件中存儲(chǔ)二進(jìn)制文件的內(nèi)容 - 就像上圖所示的那個(gè))

如果您使用的是基于 Unix 的系統(tǒng),您可以通過(guò)以下方式輕松獲得:

base64 filename.key > string.txt

現(xiàn)在,如果您想恢復(fù)二進(jìn)制文件,就像:

base64 -D string.txt > filename-clone.key

所以這不是java相關(guān)的問(wèn)題


查看完整回答
反對(duì) 回復(fù) 2021-10-13
  • 2 回答
  • 0 關(guān)注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)