Java签名
时间:2020-01-09 10:35:55 来源:igfitidea点击:
Java Signature类(java.security.Signature
)可以为二进制数据创建数字签名。数字签名是使用私钥/公钥对的私钥加密的消息摘要。拥有公钥的任何人都可以验证数字签名。
创建签名实例
必须先创建一个Signature实例,然后才能使用Java Signature类。我们可以通过调用静态的getInstance()方法来创建一个Signature实例。这是一个创建JavaSignature
实例的示例:
Signature signature = Signature.getInstance("SHA256WithDSA");
作为参数传递给getInstance()方法的String是要使用的数字签名算法的名称。
初始化签名实例
创建JavaSignature
实例后,需要先对其进行初始化,然后才能使用它。我们可以通过调用init()
方法来初始化一个Signature实例。这是一个JavaSignature
初始化示例:
SecureRandom secureRandom = new SecureRandom(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair(); signature.initSign(keyPair.getPrivate(), secureRandom);
如我们所见,"签名"实例是使用私钥/公钥对的私钥和" SecureRandom"实例初始化的。
创建数字签名
签名实例初始化后,我们可以使用它创建数字签名。我们可以通过多次调用update()
方法来创建数字签名,最后再调用sign()
。这是为二进制数据块创建数字签名的示例:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature.update(data); byte[] digitalSignature = signature.sign();
验证数字签名
如果要验证其他人创建的数字签名,则必须将"签名"实例初始化为验证模式(而不是签名模式)。这是将"签名"实例初始化为验证模式的样子:
Signature signature = Signature.getInstance("SHA256WithDSA"); signature.initVerify(keyPair.getPublic());
请注意,现在如何将JavaSignature
实例初始化为验证模式,并传递公钥/私钥对中的公钥作为参数。
初始化为验证模式后,我们可以使用"签名"实例来验证数字签名。这是验证数字签名的样子:
byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature2.update(data2); boolean verified = signature2.verify(digitalSignature);