数字签名
2019-04-08 17:58
42 查看
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
相关文章推荐
- 文本的DES加密 MD5散列值 DSA的数字签名
- 昨日关注- 给控件做数字签名
- Java数字签名
- 验证微软数字签名
- java数字签名(签名生成,用证书验证签名)
- 白话数字签名(番外篇)----签名EXE文件(下)
- 微软正版中使用盗版还有数字签名
- AUTORUN与数字签名(一)
- 数字签名的编程实现
- 文件加密与数字签名
- 白话数字签名(番外篇)—签名EXE文件(上)
- visual studio 2008 安装时遇到cab6.cab具有无效的数字签名的错误 的解决办法
- 用AutoIT编写的验证windows下可执行程序(*.exe)的数字签名有效性的自动化脚本
- Android 数字签名学习笔记 (转http://www.cnblogs.com/feisky/archive/2010/01/17/1650076.html)
- PKCS#7格式的数字签名
- [C++]EXE校验自身数字签名
- 数字签名的验证
- air 数字签名
- Java对文件进行数字签名