您的位置:首页 > 编程语言 > Java开发

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

2017-12-08 15:54 471 查看

概述

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

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

RSA工具类

使用java-信息安全(五)-非对称加密算法RSA项目中RSACoder

数字签名理解

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

示例代码

package com.jd.order.util.encryption;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.Map;

import org.junit.Before;
import org.junit.Test;

public class RSACoderTest {

private String publicKey;
private String privateKey;

@Before
public void setUp() throws Exception {
Map<String, Object> keyMap = RSACoder.initKey();

publicKey = RSACoder.getPublicKey(keyMap);
privateKey = RSACoder.getPrivateKey(keyMap);
System.err.println("公钥: \n\r" + publicKey);
System.err.println("私钥: \n\r" + privateKey);
}

@Test
public void testSignVerify() throws Exception {
String responseMsg = "abc";
System.err.println("私钥签名——公钥验证签名");
// 银行产生签名
String sign = RSACoder.sign(responseMsg.getBytes(), privateKey);
System.err.println("签名:\r" + sign);

// 客户验证签名
boolean status = RSACoder.verify(responseMsg.getBytes(), publicKey,
sign);
System.err.println("状态:\r" + status);
assertTrue(status);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐