java密码学-数字签名

简介: java密码学-数字签名

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
目录
相关文章
|
5月前
|
存储 安全 算法
Java中的数据加密与数字签名技术
Java中的数据加密与数字签名技术
|
存储 算法 Java
java密码学-非对称加密算法
非对称加密算法与对称加密算法的主要区别在于非对称加密算法用于加密和解密的密钥不同,一个公开,称为公钥;一个保密,称为私钥。因此,非对称密码算法也称为双钥和公钥加密算法。 非对称加密算法解决了对称加密算法密钥分配问题,并极大的提高了算法的安全性。多种B2C或B2B应用均使用非对称加密算法作为数据加密的核心算法。解决了对称加密算法的密钥存储问题。
98 0
|
算法 Java 数据安全/隐私保护
java密码学-数字证书(超详细)
消息摘要算法用于验证数据完整性服务,对称加密算法和非对称加密算法用于保证数据保密性服务,数字签名算法用于抗否认服务。 数字证书集合了多种密码学算法:自身带有公钥信息,可完成相应的加密/解密操作,同时,还带有数字签名,可鉴别消息来源;且自身带有消息摘要信息,可验证证书的完整性;由于证书本身含有用户身份信息,因而具有认证性。 数字证书有多种文件编码格式,主要包含CER编码(变长模式)、DER编码(定长模式)和PKCS系列等
226 0
|
算法 搜索推荐 安全
java密码学-对称加密算法
java密码学-对称加密算法
101 0
|
算法 Java 数据安全/隐私保护
数字签名的原理是什么?这篇文章给你答案(java代码实现)
数字签名在数据的交互中一直都占据着很重要的地位,因此,这篇文章对其原理进行整理总结一下。最后再给出代码的实现。
242 0
数字签名的原理是什么?这篇文章给你答案(java代码实现)
|
算法 Java API
RSA加密解密及数字签名Java实现
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
585 0
|
算法 安全 Java
【Java小工匠聊密码学】--消息摘要--SHA算法
1、什么是SHA算法   安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是联邦信息处理标准(Federal Information Processing Standards,FIPS)所认证的安全散列算法。
1476 0
|
算法 Java 数据安全/隐私保护
【Java小工匠聊密码学】--消息摘要--HMAC算法
1、什么是HMAC   HMAC是密钥相关的消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。 2、HMAC用途     我们使用MD和SHA 消息摘要算法,可以保证数据的完整性。
2366 0
|
移动开发 算法 Java
【Java小工匠聊密码学】--base64编码
1、Base64 概述 1.1 什么是Base64编码   可以将任意的字节数组数据,通过算法,生成只有(大小写英文、数字、+、/)(一共64个字符)内容表示的字符串数据。
1965 0
|
算法 安全 Java
【Java小工匠聊密码学】--消息摘要--MD算法
1、MD算法的基的概念    MD5算法是典型的消息摘要算法,其前身有MD2、MD3和MD4算法,它由MD4、MD3和MD2算法改进而来。不论是哪一种MD算法,它们都需 要获得一个随机长度的信息并产生一个128位的信息摘要。
1597 0