哈Ha! 我向您介绍了Jakob Jenkov撰写的第五篇文章“ Java Signature”的译文,该文章来自一系列初学者 ,他们希望学习Java密码学的基础知识。
目录:
- Java密码学
- Java密码
- 留言摘要
- Mac电脑
- 签章
- 密钥对
- 密钥生成器
- 密钥对生成器
- 密钥库
- 按键工具
- 证明书
- 证书工厂
- 证书路径
Java签名
Signature类( java.security.Signature )为二进制数据创建一个数字签名。 数字签名是使用私钥/公钥对的私钥加密的消息摘要 。 拥有公钥的任何人都可以验证数字签名。
创建签名实例
在使用Signature类之前,必须通过调用静态getInstance()方法实例化此类。 下面是创建签名实例的示例:
Signature signature = Signature.getInstance("SHA256WithDSA");
传递给getInstance()方法的字符串参数确定使用的数字签名加密算法。
签名实例初始化
创建Signature实例后,需要先对其进行初始化,然后再开始使用它。 Signature实例通过调用其init()方法进行初始化 。 初始化Java签名实例的示例:
SecureRandom secureRandom = new SecureRandom(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair(); signature.initSign(keyPair.getPrivate(), secureRandom);
如您所见,Signature实例是使用私钥/公钥对的私钥和SecureRandom实例初始化的。
数字签名创建
签名实例初始化后,可以使用它来创建数字签名。 通过调用update()方法(一次或多次)并以对sign()的调用结束来创建数字签名。 为二进制数据创建数字签名的示例:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature.update(data); byte[] digitalSignature = signature.sign();
数字签名验证
如果要验证其他人创建的数字签名,则必须在验证模式(而不是签名模式)下初始化签名实例。 这是在验证模式下初始化Signature实例的样子:
Signature signature = Signature.getInstance("SHA256WithDSA"); signature.initVerify(keyPair.getPublic());
请注意,Signature实例现在在验证模式下初始化,将密钥对的公钥作为参数传递。 在验证模式下初始化后,可以使用Signature实例来验证数字签名:
byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature2.update(data2); boolean verified = signature2.verify(digitalSignature);