• 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("公钥: 
    
    " + publicKey);
            System.err.println("私钥: 
    
    " + privateKey);
        }
    
        @Test
        public void testSignVerify() throws Exception {
            String responseMsg = "abc";
            System.err.println("私钥签名——公钥验证签名");
            // 银行产生签名
            String sign = RSACoder.sign(responseMsg.getBytes(), privateKey);
            System.err.println("签名:
    " + sign);
    
            // 客户验证签名
            boolean status = RSACoder.verify(responseMsg.getBytes(), publicKey,
                    sign);
            System.err.println("状态:
    " + status);
            assertTrue(status);
        }
    }
    复制代码
  • 相关阅读:
    javascript DOM事件总结
    MySQL索引优化实例说明
    CSV导出大量数据
    最详细的PHP flush()与ob
    XSS攻击(跨站攻击)
    MySQL视图
    MySQL索引
    待整理
    Height、clientHeight、scrollHeight、offsetHeight 、scrollTop、offsetTop
    Cookie和Session的区别
  • 原文地址:https://www.cnblogs.com/guweiwei/p/8005774.html
Copyright © 2020-2023  润新知