密鑰在不同實體之間傳遞,因此密鑰必須可以序列化。
所有密鑰三個特性:
- 算法:密鑰使用的算法,如DES和DSA等,通過getAlgorithm()獲取算法名
- 編碼形式:密鑰的外部編碼形式,如X.509,PKCS#8,使用getEncode()方法獲取編碼格式
- 格式:已編碼密鑰的格式的名稱,使用getFomatr()
SecretKey:對稱密鑰,DES、AES、PBE、MAC算法等
PublicKey和PrivateKey:非對稱密鑰,即公鑰和私鑰,DH、RSA、DSA、EC等
KeyPair:包含公鑰和私鑰的類。

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);
PKCS8EncodedKeySpec pkcs8KeySpec=new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory=KeyFactory.getInstance("RSA");
Key privateKey=KeyFactory.generatePrivate(pkcs8KeySpec);
- 數字簽名--私鑰簽名
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);