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);
}
}

java-信息安全(六)-基于RSA理解数字签名示例的更多相关文章
- 一个基于RSA算法的Java数字签名例子
原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...
- 基于RSA securID的Radius二次验证java实现(PAP验证方式)
基于rsa SecurID的二次验证.RSA server自身可以作为Radius服务器,RSA也可以和其他的软件集合,使用其他的server作为Radius服务器. radius的验证的一般流程如下 ...
- 基于RSA的前后端登陆密码加密JAVA实现(转)
RSA加密算法简介 SA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难,RSA算法愈 ...
- 【转】基于RSA算法实现软件注册码原理初讨
1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...
- JAVA的非对称加密算法RSA——加密和解密
原文转载至:https://www.cnblogs.com/OnlyCT/p/6586856.html 第一部分:RSA算法原理与加密解密 一.RSA加密过程简述 A和B进行加密通信时,B首先要生成一 ...
- 【转载】非对称加密过程详解(基于RSA非对称加密算法实现)
1.非对称加密过程: 假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...
- Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析
Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把 ...
- 【编程开发】非对称加密过程详解(基于RSA非对称加密算法实现)
1.非对称加密过程: 假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...
- java使用zookeeper实现的分布式锁示例
java使用zookeeper实现的分布式锁示例 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-07我要评论 这篇文章主要介绍了java使用zookeeper实现的分布式锁示例,需要 ...
随机推荐
- Python图形编程探索系列-01-初级任务
设计任务 设计一个主窗口,在其中添加三个标签和三个按钮,当点击按钮时,对标签的内容和色彩进行修改. 代码初步设计 import tkinter as tk root = tk.Tk() def f1( ...
- Java并发程序设计(七)乐天派:无锁
无锁 一.概述 无锁是处理并发的一种乐观策略,它会假设对资源的访问是没有冲突的.既然没有冲突自然不需要等待,所以所有的线程都可以在不停顿的状态下执行.那遇到冲突怎么办?接下来请看,无锁绝招“CAS”即 ...
- Linux内核笔记:epoll实现原理(二)
在通过epoll_ctl(2)向epoll中添加被监视文件描述符时,会将ep_poll_callback()作为回调函数添加被监视文件的等待队列中.下面分析ep_poll_callback()函数 1 ...
- Github和Git上fork指南
现在有这样一种情形:有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它.并且Joe将他的代码放在了GitHub仓库上.下面是你要做的事情: fork并且更新GitHub仓库的图表演示 For ...
- .net里Release的pdb文件有什么用 是否可以删除
程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接. 在使用 /debug 生成时,会创建一个 PDB 文件. 可以使用 /debug:full 或 / ...
- 发布库到仓库 maven jcenter JitPack MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- jQuery()方法的第二个参数
关于jQuery()方法的第二个参数,有下面这几种用法: 1.jQuery(selector, [context]) 这种用法,相当于 $(context).find(selector) 或者 con ...
- SSE图像算法优化系列一:一段BGR2Y的SIMD代码解析。
一个同事在github上淘到一个基于SIMD的RGB转Y(彩色转灰度或者转明度)的代码,我抽了点时间看了下,顺便学习了一些SIMD指令,这里把学习过程中的一些理解和认识共享给大家. github上相关 ...
- Scala字符串插值
Scala提供了三种字符串插值方式:s,f和raw.1. s字符串插值器简单的说就是解析字符串变量. val name = "Tom" println(s"His nam ...
- C# System.Collections.ArrayList
using System; using System.Collections; public class SamplesArrayList { public static void Main() { ...