標籤:

keystore提取私鑰和證書(重要×××)

keystore提取私鑰和證書(重要×××)

2011-04-23 13:30:37|分類: HTTPS keytool |字型大小訂閱

( From:http://wangxuliangboy.javaeye.com/blog/382434)

keytool -genkey -alias test -keyalg RSA -keystore c:/key.store

生成keyStore

RSA是一個既能用於數據加密也能用於數字簽名的演算法。

DSA(Digital Signature Algorithm,數字簽名演算法,用作數字簽名標準的一部分),它是另一種公開密鑰演算法,它不能用作加密,只用作數字簽名。DSA使用公開密鑰,為接受者驗證數據的完整性和數據發送者的身份。

提取證書:

通過keytool命令我們可以很輕鬆的提取證書.

證書包括主體信息,公鑰.

keytool -export -alias 別名 -keystore 文件名 -file 證書名稱

但是我們無法通過KEYTOOL工具來提取私鑰的..我們只能通過java的KeyStore類getEntry() 或者getKey()來提取私鑰.

讀取keyStore文件:

char[] password = "password".toCharArray();

java.io.FileInputStream fis = new java.io.FileInputStream("c:/server/server_keystore");

// 從指定的輸入流中載入此 KeyStoreks.load(fis, password);//keystore 中的每一項都用「別名」字元串標識。

//使用指定保護參數獲取指定別名的 keystore Entry

//KeyStore.PrivateKeyEntry 保存 PrivateKey 和相應證書鏈的 KeyStore 項。

方法1. KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry( "keystore別名", new KeyStore.PasswordProtection( password));

// 返回與給定別名相關聯的密鑰

方法2. PrivateKey key = (PrivateKey) ks.getKey("ser", password);

怎麼來驗證提取的私鑰是否正確呢?(因為公鑰私鑰必須成對出現,我們可以通過證書提取去公鑰,然後用公鑰加密,使用剛剛獲得的私鑰解密)

提取證書的方法:

keytool -export -alias 別名 -keystore 文件名 -file 證書名稱

// 提取公鑰方法1:通過PrivateKeyEntry獲得證書,然後提取公鑰

Certificate c = pkEntry.getCertificate();PublicKey publicKey = c.getPublicKey();

// 提取公鑰方法2:通過證書流獲得證書,然後提取公鑰

CertificateFactory cf = CertificateFactory.getInstance("X.509"); FileInputStream in = new FileInputStream("C:\server\server.cer");

//生成一個證書對象並使用從輸入流 inStream 中讀取的數據對它進行初始化。 Certificate c = cf.generateCertificate(in);PublicKey publicKey = c.getPublicKey();

// 提取公鑰方法3:通過別名獲得證書,然後提取公鑰

Certificate c = ks.generateCertificate("ser"); // 通過別名來提取公鑰PublicKey publicKey = c.getPublicKey();

//通過下面這段代碼提取的私鑰是否正確

String before = "asdf";

byte[] plainText = before.getBytes("UTF-8");Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); // 用公鑰進行加密,返回一個位元組流 byte[] cipherText = cipher.doFinal(plainText); cipher.init(Cipher.DECRYPT_MODE, myPrivateKey); // 用私鑰進行解密,返回一個位元組流 byte[] newPlainText = cipher.doFinal(cipherText); System.out.println(new String(newPlainText, "UTF-8"));
推薦閱讀:

民國妓女申請書和保證書/組圖
哪些證書是可以掛靠的?有哪些風險?
夫妻各自偷情互相捉姦 妻子要老公寫保證書
用「保證書」能制約丈夫嗎
夫妻保證書

TAG:證書 | 重要 |