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);
posted @ 2014-08-30 11:22  徐小鱼  阅读(4869)  评论(0编辑  收藏  举报