Java实现的数字签名算法RSA完整示例
程序员文章站
2022-10-25 18:17:34
本文实例讲述了java实现的数字签名算法rsa。分享给大家供大家参考,具体如下:
一 背景介绍
数字签名:带有密钥(公钥、私钥)的消息摘要算法。
验证数据完整性、认证...
本文实例讲述了java实现的数字签名算法rsa。分享给大家供大家参考,具体如下:
一 背景介绍
数字签名:带有密钥(公钥、私钥)的消息摘要算法。
验证数据完整性、认证数据来源、抗否认。
私钥签名、公钥验证。
常用算法:rsa、dsa、ecdsa
二 rsa介绍
包括md和sha两类
三 java代码实现
package com.imooc.security.rsa2; import java.security.keyfactory; import java.security.keypair; import java.security.keypairgenerator; import java.security.privatekey; import java.security.publickey; import java.security.signature; import java.security.interfaces.rsaprivatekey; import java.security.interfaces.rsapublickey; import java.security.spec.pkcs8encodedkeyspec; import java.security.spec.x509encodedkeyspec; import org.apache.commons.codec.binary.hex; public class imoocrsa { private static string src = "cakin security rsa"; public static void main(string[] args) { jdkrsa(); } public static void jdkrsa() { try { //1.初始化密钥 keypairgenerator keypairgenerator = keypairgenerator.getinstance("rsa"); keypairgenerator.initialize(512); keypair keypair = keypairgenerator.generatekeypair(); rsapublickey rsapublickey = (rsapublickey)keypair.getpublic(); rsaprivatekey rsaprivatekey = (rsaprivatekey)keypair.getprivate(); //2.执行签名 pkcs8encodedkeyspec pkcs8encodedkeyspec = new pkcs8encodedkeyspec(rsaprivatekey.getencoded()); keyfactory keyfactory = keyfactory.getinstance("rsa"); privatekey privatekey = keyfactory.generateprivate(pkcs8encodedkeyspec); signature signature = signature.getinstance("md5withrsa"); signature.initsign(privatekey); signature.update(src.getbytes()); byte[] result = signature.sign(); system.out.println("jdk rsa sign : " + hex.encodehexstring(result)); //3.验证签名 x509encodedkeyspec x509encodedkeyspec = new x509encodedkeyspec(rsapublickey.getencoded()); keyfactory = keyfactory.getinstance("rsa"); publickey publickey = keyfactory.generatepublic(x509encodedkeyspec); signature = signature.getinstance("md5withrsa"); signature.initverify(publickey); signature.update(src.getbytes()); boolean bool = signature.verify(result); system.out.println("jdk rsa verify : " + bool); } catch (exception e) { e.printstacktrace(); } } }
四 实现效果
jdk rsa sign : 64b62967438d05f8f9837a089aaecd3b1379fd8eef89b924632536deb95d94d8389da456014ee953a1ac1befe44612c61b750b48c8574b98a9855a07a724e7e4
jdk rsa verify : true
五 应用场景
ps:关于加密解密感兴趣的朋友还可以参考本站在线工具:
在线rsa加密/解密工具:
文字在线加密解密工具(包含aes、des、rc4等):
md5在线加密工具:
http://tools.jb51.net/password/createmd5password
在线散列/哈希算法加密工具:
在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:
在线sha1/sha224/sha256/sha384/sha512加密工具: