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

 更新时间:2019年09月05日 08:57:55   作者:cakincqm  
这篇文章主要介绍了Java实现的数字签名算法RSA,结合完整实例形式详细分析了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加密/解密工具:
http://tools.jb51.net/password/rsa_encode

文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • SSL证书部署+SpringBoot实现HTTPS安全访问的操作方法

    SSL证书部署+SpringBoot实现HTTPS安全访问的操作方法

    文章介绍了SSL和HTTPS的工作原理,包括握手阶段和安全数据传输阶段,通过模拟HTTPS请求,展示了如何生成自签名证书并配置Spring Boot应用程序以支持HTTPS,总结指出,SSL和HTTPS对于保护网络安全至关重要,感兴趣的朋友一起看看吧
    2025-02-02
  • java数据结构之希尔排序

    java数据结构之希尔排序

    这篇文章主要为大家详细介绍了java数据结构之希尔排序的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • IDEA调试源码小技巧之辨别抽象类或接口多种实现类的正确路径

    IDEA调试源码小技巧之辨别抽象类或接口多种实现类的正确路径

    这篇文章主要介绍了IDEA调试源码小技巧之辨别抽象类或接口多种实现类的正确路径,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 教你快速学会JPA中所有findBy语法规则

    教你快速学会JPA中所有findBy语法规则

    这篇文章主要介绍了教你快速学会JPA中所有findBy语法规则,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring Boot整合持久层之JdbcTemplate多数据源

    Spring Boot整合持久层之JdbcTemplate多数据源

    持久层是JavaEE中访问数据库的核心操作,SpringBoot中对常见的持久层框架都提供了自动化配置,例如JdbcTemplate、JPA 等,MyBatis 的自动化配置则是MyBatis官方提供的。接下来分别向读者介绍Spring Boot整合这持久层技术中的整合JdbcTemplate
    2022-08-08
  • Java超详细讲解SpringMVC如何获取请求数据

    Java超详细讲解SpringMVC如何获取请求数据

    Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,Spring MVC 角色划分清晰,分工明细,本章来讲解SpringMVC如何获取请求数据
    2022-04-04
  • 详解springboot项目docker部署实践

    详解springboot项目docker部署实践

    这篇文章主要介绍了详解springboot项目docker部署实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java+OpenCV实现图片中的人脸识别

    Java+OpenCV实现图片中的人脸识别

    这篇文章主要介绍了如何利用java opencv实现人脸识别功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • mybatis中批量插入的两种方式(高效插入)

    mybatis中批量插入的两种方式(高效插入)

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。这篇文章主要介绍了mybatis中批量插入的两种方式(高效插入)的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • JAVA反射机制实例详解

    JAVA反射机制实例详解

    这篇文章主要介绍了JAVA反射机制,以实例形式较为详细的分析讲解了Java反射机制的具体概念、功能与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11

最新评论