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

概述

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);
    }
}
复制代码
posted @ 2017-12-08 15:54  暖阳g  阅读(501)  评论(0编辑  收藏  举报