亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么已經獲取了私鑰了還要用keyfactory?

為什么已經獲取了私鑰了還要用keyfactory?

正在回答

1 回答

老師的意思的是密鑰的轉換,實際上并不需要轉換,也不需要重新生成keyfactory??赡苁菍嶋H項目中一般會這樣,因為實際接受方和發送方并不知道對方的密鑰的encoded format(編碼格式),所以需要轉換成自己使用encoded format。例如本節里面的X509...之類的。而KeyFactory就是轉換格式后重新生成私鑰,公鑰。

也可以用下面的代碼,不需要轉換,理論上是可以的:

package?com.imooc.RSA;
import?org.apache.commons.codec.binary.Hex;
import?javax.crypto.Cipher;
import?java.security.KeyPair;
import?java.security.KeyPairGenerator;
/**
?*?Created?by?anyuan?on?2016/11/23.
?*/
public?class?ImoocRSA?{
????public?static?final?String?src?=?"imooc?security?rsa";
????public?static?void?main(String[]?args)?throws?Exception?{
????????jdkRSA();
????}
????public?static?void?jdkRSA()?throws?Exception?{
????????//初始化密鑰
????????KeyPairGenerator?keyPairGenerator?=?KeyPairGenerator.getInstance("RSA");
????????keyPairGenerator.initialize(512);//512~65532
????????KeyPair?keyPair?=?keyPairGenerator.generateKeyPair();
????????//私鑰加密,公鑰解密
????????//下面是產生密鑰工廠,用公鑰或者私鑰產生密鑰工廠,進而產生密鑰。原則上這里可以省略.密鑰轉換也可以省略
//????????KeyFactory?keyFactory?=?KeyFactory.getInstance("RSA");
//????????PrivateKey?privateKey?=?keyFactory.generatePrivate((KeySpec)?keyPair.getPrivate());
????????Cipher?cipher?=?Cipher.getInstance("RSA");
????????cipher.init(Cipher.ENCRYPT_MODE,?keyPair.getPrivate());
????????byte[]?result?=?cipher.doFinal(src.getBytes());
????????System.out.println("**私鑰加密,公鑰解密**");
????????System.out.println("加密:"?+?Hex.encodeHexString(result));
????????cipher.init(Cipher.DECRYPT_MODE,?keyPair.getPublic());
????????result?=?cipher.doFinal(result);
????????System.out.println("解密:"?+?new?String(result));
????}
}

代碼簡潔很多。自己寫的時候沒必要像老師那么繁瑣。但是實際項目中就不一定了。


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么已經獲取了私鑰了還要用keyfactory?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號