java-信息安全(六)-签名001-基于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