key解析


密鑰在不同實體之間傳遞,因此密鑰必須可以序列化。
所有密鑰三個特性:
  1. 算法:密鑰使用的算法,如DES和DSA等,通過getAlgorithm()獲取算法名
  2. 編碼形式:密鑰的外部編碼形式,如X.509,PKCS#8,使用getEncode()方法獲取編碼格式
  3. 格式:已編碼密鑰的格式的名稱,使用getFomatr()

SecretKey:對稱密鑰,DES、AES、PBE、MAC算法等
PublicKey和PrivateKey:非對稱密鑰,即公鑰和私鑰,DH、RSA、DSA、EC等
KeyPair:包含公鑰和私鑰的類。

DSA算法密鑰對
KeyPairGeneraor kpg=KeyPairGenerator.getInstance("DSA");

kpg.initialize(1024);

keyPair keys=kpg.genKeyPair();


構建密鑰對與還原密鑰對
keyPairGenerator  keyPairGen=KeyPairGenerator.getInstance("RSA");

KeyPairGenerator.initialize(1024);

KeyPair keyPair=KeyPairGen.generateKeyPair();

//獲得私鑰密鑰字節數組,實際使用過程中,該私鑰以此種形式保存傳遞給另一方
byte[] keyBytes=keyPair.getPrivate().getEncoded();


//由私鑰密鑰字節數組獲取密鑰規范
PKCS8EncodedKeySpec pkcs8KeySpec=new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory=KeyFactory.getInstance("RSA");

Key privateKey=KeyFactory.generatePrivate(pkcs8KeySpec);


  1. 數字簽名--私鑰簽名
byte[] data="Data Signature".getBytes();

keyPairGenerator keyPairGen=KeyPairGenerator.getInstance("DSA")

KeyPairGenerator.initialize(1024);

KeyPair keyPair=KeyPairGen.generatePair();

Signature signature= Signature.getInstance(keyPairGen.getAlgorithm());

signature.initSign(keyPair.getPrivate());//用私鑰簽名

signature.updata(data);

byte[] sign=signature.sign();

     2.數字簽名--公鑰驗證

signature.initVerify(keyPair.getPublic());//公鑰驗證

signature.updata(data);

//獲取驗證結果,true則為驗證成功
boolean status=signature.verify(sign);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM