欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java实现的数字签名算法RSA完整示例

程序员文章站 2022-10-25 18:17:34
本文实例讲述了java实现的数字签名算法rsa。分享给大家供大家参考,具体如下: 一 背景介绍 数字签名:带有密钥(公钥、私钥)的消息摘要算法。 验证数据完整性、认证...

本文实例讲述了java实现的数字签名算法rsa。分享给大家供大家参考,具体如下:

一 背景介绍

数字签名:带有密钥(公钥、私钥)的消息摘要算法。
验证数据完整性、认证数据来源、抗否认。
私钥签名、公钥验证。
常用算法:rsa、dsa、ecdsa

二 rsa介绍

包括md和sha两类

Java实现的数字签名算法RSA完整示例

三 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

五 应用场景

Java实现的数字签名算法RSA完整示例

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加密工具: