Java中的密码学。 签名班

哈Ha! 我向您介绍了Jakob Jenkov撰写的第五篇文章“ Java Signature”的译文,该文章来自一系列初学者 ,他们希望学习Java密码学的基础知识。


目录:


  1. Java密码学
  2. Java密码
  3. 留言摘要
  4. Mac电脑
  5. 签章
  6. 密钥对
  7. 密钥生成器
  8. 密钥对生成器
  9. 密钥库
  10. 按键工具
  11. 证明书
  12. 证书工厂
  13. 证书路径

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); 

Source: https://habr.com/ru/post/zh-CN445330/


All Articles