java-信息安全(六)-签名001-基于RSA理解数字签名示例

一、概述

java-信息安全(四)-数据签名、数字证书

java-信息安全(五)-非对称加密算法RSA

1.1、签名方案

私钥签名,公钥验签

RSA签名流程:

  发送方—>构建密钥对-》公布密钥给接收方—>使用私钥对数据签名-》发送签名、数据给接收方。
  接收方—》使用公钥、签名验证数据

1.2、算法分类

算法 密钥长度 默认长度 签名长度 实现的方
MD2withRSA 512-65536
(64的整数倍)
1024 同密钥 JDK8
MD5withRSA 同上 1024 同密钥 JDK8
SHA1withRSA ... 1024 同密钥 JDK8
SHA224withRSA ... 2048 同密钥 JDK8
SHA256withRSA ... 2048 同密钥 JDK8
SHA384withRSA ... 2048 同密钥 JDK8
SHA512withRSA ... 2048 同密钥 JDK8
RIPEMD128withRSA   2048 同密钥 BC
RIPEMD160withRSA 同上 2048 同密钥 BC

1.3、示例数字签名理解【银行与个人信息交互】

        // 以下指示方便理解,并非真实场景
        // 银行【公钥,私钥】----个人【银行的公钥】
        // 一、个人→银行【RSA公钥加密// 1.个人发给银行密码,使用银行公钥进行加密,发给银行
        // 2.银行读取解密后,准备回馈个人信息
        // 二、银行→个人【银行数字签名// 注:由于个人没有公钥,私钥,银行也就没法用个人的公钥进行数据加密,但是为了确保信息是银行发的,使用数字签名
        // 1.银行将要反馈给个人的数据进行,数字摘要【MD5,sha】等,将数字摘要用私钥加密,
        // 2.此时,银行将要发数据与私钥加密后的sign一起发给用户
        // 3.用户收到数据与签名,用公钥对签名进行解密,解密成功,说明信息是银行发的
        // 4.用户将数据用与银行约定好的数字摘要算法,进行数字摘要,对比解密后的签名与此签名是否一致,一致即数据完整
        // 补充1,为了防止,别人伪造银行,所以需要使用数字证书,对公钥进行认证,就不会被伪造

示例代码

代码地址:https://github.com/bjlhx15/algorithm-sign.git 路径/algorithm-sign/algorithm-sign-impl/src/main/java/com/github/bjlhx15/security/sign001rsa

原文地址:https://www.cnblogs.com/bjlhx/p/6559653.html