当前位置: 移动技术网 > IT编程>开发语言>Java > Java实现的数字签名算法RSA完整示例

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

2019年09月09日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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在线加密工具:

在线散列/哈希算法加密工具:

在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:

在线sha1/sha224/sha256/sha384/sha512加密工具:

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网