Signature类
Signature类用来生成和验证数字签名(引擎类)
方法详述
1)初始化 初始化验证签名的公钥 初始化验证签名的私钥 2)更新 根据初始化类型,可更新要签名或验证的字节 3)签署或验证所有更新字节的签名 getInstance(String algorithm) getInstance(String algorithm,Provider provider) getInstance(String algorithm,String provider) //初始化用于签名的Signature对象 initSign(PrivateKey privateKey) initSign(PrivateKey privateKey,SecureRandom random) //初始化用于验证的Signature对象 initVertify(PublicKey publicKey) //初始化来自给定证书的公钥初始化用于验证的Signature对象 initVertify(Certificate certificate) //使用指定的字节数组更新要签名和验证的数据 update(byte[] data) //从指定偏移量开始更新 update(byte[] data,int off,int len) //使用缓冲方式更新 update(ByteBuffer data) //返回所有的已更新数据的签名或验证的字节 sign() //完成签名操作,并得到存储在缓冲区域中的签名字节长度 sign(byte[] output,int offset,int len) //验证传入的签名,并返回验证结果 vertify(byte[] signature) vertify(byte[] signature,int offset,int len) //使用指定的参数集初始化此签名引擎 setParameter(AlgorithmParameterSpec params) //返回与此签名对象一起使用的参数 getParameters() //获取算法名称 getAlgorithm(); //若可以复制则返回副本 clone() //获取提供者 getProvider(); //输出信息 toString();
实现实例
//待做数据签名的原始信息 byte[] data = "Data Signature".getBytes(); //实例化KeyPairGenerator对象 KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA"); //初始化KeyPairGenerator对象 kpg.initialize(1024); //生成KeyPair对象 KeyPair kp = kpg.genKeyPair(); //实例化Signture对象 Signature signature = Signature.getInstance(kpg.getAlgorithm()); //初始化用于签名的Signature对象 signature.initSign(kp.getPrivate()); //更新 signature.update(data); //获得签名,即字节数组Sign byte[] sign = signature.sign(); //私钥完成签名,公钥用于完成验证 signature.initVerify(kp.getPublic()); //更新 signature.update(data); //获取验证结果 boolean status = signature.verify(sign); System.out.println(status); //true
其他的方式SignedObject
SignedObject包含了另外一个Serializable对象,即要签名的对象及其签名,我们可以称之为签名对象。它是对原始对象的“深层复制”,一旦生成了副本,对原始对象的进一步操作就不再影响该副本。
方法详述
//构造器 SignedObject(Serializable object,PrivateKey privateKey,Signature signingEngine) //获取已封装的对象 getObject() //获取签名 getSignature() //验证操作 vertify(PublicKey verificationKey,Signature verificatioEngine) //获取签名算法名 getAlgorithm()
第二种数字签名实例
//待做数字签名的原始信息 byte[] data = "Data Signature".getBytes(); //实例化KeyPairGenerator对象 KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA"); //初始化KeyPairGenerator对象 kpg.initialize(1024); //生成KeyPair对象 KeyPair keyPair = kpg.genKeyPair(); //实例化Signature对象 Signature signature = Signature.getInstance(kpg.getAlgorithm()); //实例化SignObject对象 SignedObject s = new SignedObject(data,keyPair.getPrivate(),signature); //通过另外一种方式得到签名 byte[] sign = s.getSignature(); //验证签名 boolean status = s.verify(keyPair.getPublic(),signature); System.out.println(status); //true