key解析
密钥在不同实体之间传递,因此密钥必须可以序列化。
所有密钥三个特性:
- 算法:密钥使用的算法,如DES和DSA等,通过getAlgorithm()获取算法名
- 编码形式:密钥的外部编码形式,如X.509,PKCS#8,使用getEncode()方法获取编码格式
- 格式:已编码密钥的格式的名称,使用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);
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);