博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java数字签名——RSA算法
阅读量:5238 次
发布时间:2019-06-14

本文共 2791 字,大约阅读时间需要 9 分钟。

  数字签名:带有密钥(公钥,私钥)的消息摘要算法。

       验证数据的完整性,认证数据的来源,抗否性

  OSI参考模型

  私钥签名,公钥验证

  签名算法:RSA,DSA,ECDSA

  

  算法1 :RSA

      MD,SHA两类

————————————————————————————————————

      密钥长度均是 512~65536(64的整数倍)

————————————————————————————————————  

      实现方:JDK     默认长度:1024

        MD2withRSA

        MD5withRSA

        SHA1withRSA

 

————————————————————————————————————

      实现方:BC     默认长度:2048

        SHA224withRSA

        SHA256withRSA

        SHA384withRSA

        SHA512withRSA

        RIPEMD128withRSA

        RIPEMD160withRSA

————————————————————————————————————

1 package RSA; 2  3 import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin; 4  5 import java.security.*; 6 import java.security.interfaces.RSAPrivateKey; 7 import java.security.interfaces.RSAPublicKey; 8 import java.security.spec.PKCS8EncodedKeySpec; 9 import java.security.spec.X509EncodedKeySpec;10 11 public class Rsa {12     public static String src = "hello human";13     public static void main(String[] args) {14         jdkRSA();15     }16     public static void jdkRSA(){17         try{18             // 密钥初始化19             KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");20             keyPairGenerator.initialize(512);21             KeyPair keyPair = keyPairGenerator.generateKeyPair();22             RSAPublicKey rsaPublicKey = (RSAPublicKey)keyPair.getPublic() ;23             RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)keyPair.getPrivate() ;24             // 签名25             PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());26             KeyFactory keyFactory = KeyFactory.getInstance("RSA");27             PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);28             Signature signature = Signature.getInstance("MD5withRSA");29             signature.initSign(privateKey);30             signature.update(src.getBytes());31             byte []arr = signature.sign();32             System.out.println("jdk rsa sign:"+ HexBin.encode(arr));33             // 验证签名34             X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded()) ;35             keyFactory = KeyFactory.getInstance("RSA");36             PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);37             signature = Signature.getInstance("MD5withRSA");38             signature.initVerify(publicKey);39             signature.update(src.getBytes());40             boolean bool = signature.verify(arr);41             System.out.println("jdk rsa verify:"+bool);42         }catch (Exception e){43 44         }45     }46 }

 

  执行过程:

    构建密钥对:

      发送方 :1.构建密钥对

           2.公布密钥

    发送数据   :

      发送方 :1.使用私钥对数据签名

           2.发送签名,数据

      接收放 :3.使用公钥,签名验证数据

转载于:https://www.cnblogs.com/LexMoon/p/javaRSA.html

你可能感兴趣的文章
头脑王者 音乐
查看>>
new Modifier (C# Reference)
查看>>
待学习的
查看>>
ubuntu12 root账户自动登录
查看>>
C#认证二单元 第一题
查看>>
软件测试lab by石家名
查看>>
两条SQL语句
查看>>
Resin 4.0 部署SSL证书
查看>>
详解用CSS3制作圆形滚动进度条动画效果
查看>>
谷歌浏览器调试大全
查看>>
使用重构的方式制作出一个如下图的水平、垂直都居中短边为50px,长边为150px的红色十字架。...
查看>>
cookie注意事项
查看>>
基于tensorflow的逻辑分类
查看>>
关于css,js放置位置的问题
查看>>
python之路 -- 爬虫 -- Scrapy入门
查看>>
OC基础8:分类和协议
查看>>
C#依据进程名称获取进程的句柄?
查看>>
音乐TV2015校园招聘A第二大发行量(对中国科学院大学站)
查看>>
工作日志2014-08-28
查看>>
Google App Engine 学习和实践
查看>>