Java加密与解密的艺术~数字签名~RSA实现

RSA 实现

/*** 2008-6-11*/
package org.zlex.chapter09_1;import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;import java.util.HashMap;
import java.util.Map;/*** RSA安全编码组件* * @author 梁栋* @version 1.0*/
public abstract class RSACoder {/*** 数字签名* 密钥算法*/public static final String KEY_ALGORITHM = "RSA";/*** 数字签名* 签名/验证算法*/public static final String SIGNATURE_ALGORITHM = "SHA1withRSA";/*** 公钥*/private static final String PUBLIC_KEY = "RSAPublicKey";/*** 私钥*/private static final String PRIVATE_KEY = "RSAPrivateKey";/*** RSA密钥长度 默认1024位,*  密钥长度必须是64的倍数, *  范围在512至65536位之间。*/private static final int KEY_SIZE = 512;/*** 签名* * @param data*            待签名数据* @param privateKey*            私钥* @return byte[] 数字签名* @throws Exception*/public static byte[] sign(byte[] data, byte[] privateKey) throws Exception {// 转换私钥材料PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(privateKey);// 实例化密钥工厂KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);// 取私钥匙对象PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);// 实例化SignatureSignature signature = Signature.getInstance(SIGNATURE_ALGORITHM);// 初始化Signaturesignature.initSign(priKey);// 更新signature.update(data);// 签名return signature.sign();}/*** 校验* * @param data*            待校验数据* @param publicKey*            公钥* @param sign*            数字签名* * @return boolean 校验成功返回true 失败返回false* @throws Exception* */public static boolean verify(byte[] data, byte[] publicKey, byte[] sign)throws Exception {// 转换公钥材料X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKey);// 实例化密钥工厂KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);// 生成公钥PublicKey pubKey = keyFactory.generatePublic(keySpec);// 实例化SignatureSignature signature = Signature.getInstance(SIGNATURE_ALGORITHM);// 初始化Signaturesignature.initVerify(pubKey);// 更新signature.update(data);// 验证return signature.verify(sign);}/*** 取得私钥* * @param keyMap* @return* @throws Exception*/public static byte[] getPrivateKey(Map<String, Object> keyMap)throws Exception {Key key = (Key) keyMap.get(PRIVATE_KEY);return key.getEncoded();}/*** 取得公钥* * @param keyMap* @return* @throws Exception*/public static byte[] getPublicKey(Map<String, Object> keyMap)throws Exception {Key key = (Key) keyMap.get(PUBLIC_KEY);return key.getEncoded();}/*** 初始化密钥* * @return Map 密钥对儿 Map* @throws Exception*/public static Map<String, Object> initKey() throws Exception {// 实例化密钥对儿生成器KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);// 初始化密钥对儿生成器keyPairGen.initialize(KEY_SIZE);// 生成密钥对儿KeyPair keyPair = keyPairGen.generateKeyPair();// 公钥RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();// 私钥RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();// 封装密钥Map<String, Object> keyMap = new HashMap<String, Object>(2);keyMap.put(PUBLIC_KEY, publicKey);keyMap.put(PRIVATE_KEY, privateKey);return keyMap;}
}

RSA 示例 

/*** 2008-6-11*/
package org.zlex.chapter09_1;import static org.junit.Assert.*;import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.junit.Before;
import org.junit.Test;import java.util.Map;/*** RSA数字签名校验* * @author 梁栋* @version 1.0*/
public class RSACoderTest {/*** 公钥*/private byte[] publicKey;/*** 私钥*/private byte[] privateKey;/*** 初始化密钥* * @throws Exception*/@Beforepublic void initKey() throws Exception {Map<String, Object> keyMap = RSACoder.initKey();publicKey = RSACoder.getPublicKey(keyMap);privateKey = RSACoder.getPrivateKey(keyMap);System.err.println("公钥: \n" + Base64.encodeBase64String(publicKey));System.err.println("私钥: \n" + Base64.encodeBase64String(privateKey));}/*** 校验* * @throws Exception*/@Testpublic void testSign() throws Exception {String inputStr = "RSA数字签名";byte[] data = inputStr.getBytes();// 产生签名byte[] sign = RSACoder.sign(data, privateKey);System.err.println("签名:\n" + Hex.encodeHexString(sign));// 验证签名boolean status = RSACoder.verify(data, publicKey, sign);System.err.println("状态:\n" + status);assertTrue(status);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科技部认定的独角兽名单来了!共164家

来源&#xff1a;中国证券报丨公众号 作者&#xff1a;杨洁今天上午&#xff0c; 科技部火炬中心、中关村管委会、长城战略咨询、中关村银行联合主办“2017中国独角兽企业发展报告”发布会。《2017中国独角兽企业发展报告》显示&#xff1a; 2017年中国独角兽企业共164家新晋62…

《Head First 设计模式》专题上线

立即访问《Head First 设计模式》专题 我们为这本经典图书制作了专题&#xff0c;也想在此了解一下园子里有哪些朋友看过这本书。 --- 博客园团队 2008年12月26日 转载于:https://www.cnblogs.com/bookshop/archive/2008/12/26/1363084.html

Java加密与解密的艺术~数字签名~DSA实现

DSA 实现 /*** 2008-6-13*/ package org.zlex.chapter09_2;import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import …

tcpdump - 数据包进行截获的包分析工具

From&#xff1a;http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 30 分钟掌握 tcpdump&#xff1a;http://zhuanlan.51cto.com/art/201701/527498.htm Android tcpdump 下载&#xff1a;https://www.androidtcpdump.com/android-tcpdump/downloads tcpdum…

相持不下的争论:脑波,有用吗?

来源&#xff1a;原理、编译&#xff1a;糖兽在大脑中&#xff0c;存在着我们看不见的脑电活动。这些脑波是由在大脑周围大量存在神经细胞的协调发射而产生的&#xff0c;他们可以从大脑的前部传到后部&#xff0c;从大脑深处传到头皮。这种脑电活动被称为神经元振荡。有意思的…

CVS 客户端使用手册

IRLab 2003年2月10日 什么是CVS CVS&#xff08;Version Control System.&#xff09;即版本控制系统。用来记录源文件的历史信息。甚至二进制文件&#xff0c;媒体文件等。 例如&#xff0c;当软件修改时有时会产生Bugs&#xff0c;并且你可能在做这次修改后很长时间不会发现这…

redisserver是什么问题_面试官老是问:为什么采用单线程的Redis也会如此之快?...

Java面试笔试面经、Java技术每天学习一点公众号Java面试关注我不迷路作者&#xff1a;kaito来源&#xff1a;http://kaito-kidd.com/2020/06/28/why-redis-so-fast/众所周知&#xff0c;Redis在内存库数据库领域非常地火热&#xff0c;它极高的性能和丰富的数据结构为我们的开发…

Java加密与解密的艺术~数字签名~ECDSA实现

ECDSA 实现 /*** 2009-10-10*/ package org.zlex.chapter09_3;import java.math.BigInteger; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import …

Science:语言可能并不是推理能力所必需的

来源&#xff1a;神经科技丨公众号在一项新的针对婴儿的研究中&#xff0c;来自西班牙、匈牙利和波兰的研究人员发现语言可能并不是推理能力&#xff08;reasoning ability&#xff09;所必需的。在发表在2018年3月16日的Science期刊上的一篇标题为“Precursors of logical rea…

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

最好的 MitM 中间人攻击开源框架清单&#xff1a;https://github.com/Chan9390/Awesome-MitM 哔哩哔哩&#xff1a;https://search.bilibili.com/all?keywordwireshark 1、WireShark WireShark 是一个开源免费的高性能网络协议分析软件&#xff0c;它的前身就是非常著名的网络…

JavaScript抽象类及Class.create备忘

我们知道抽象在面向对象中的重要地位。而JavaScript虽不是一门户严格意义上的面向对象语言&#xff0c;但&#xff0c;它也可以有自己的面向对象实现。当然包括抽象。在JavaScript中,虚方法可以看作该类中没有定义的方法,但已经通过this指针使用了.通过下面的示例可以看出&…

人工脑连接体:类脑人工智能的奇点时刻来临

来源&#xff1a;华春雷科学网博客最近&#xff0c;Mindputer实验室制造出世界首个“人工脑连接体”&#xff08;True-Brain&#xff09;的信息刚刚发布&#xff08;详见《会议通报&#xff1a;中国Mindputer实验室首次造出人工脑连接体》。做为一个高前沿性的专业技术概念&…

电脑、手机 自动化 键鼠操作( 类似按键精灵 )

有没有和按键精灵类似的脚本软件 &#xff1f;&#xff1f;&#xff1a;https://www.zhihu.com/question/342937346 AutomateIt、Automate、按键精灵、AutoJS…等Android自动化工具有什么特点&#xff1f;&#xff1a;https://www.zhihu.com/question/59503646 按键精灵系列软…

Java加密与解密的艺术~数字证书详解

数字证书具备常规加密/解密必要的信息&#xff0c;包含签名算法&#xff0c;可用于网络数据加密/解密交互&#xff0c;标识网络用户&#xff08;计算机&#xff09;身份。数字证书为发布公钥提供了一种简便的途径&#xff0c;其数字证书则成为加密算法以及公钥的载体。依靠数字…

学界 | DeepMind论文解读:通过删除神经元来了解深度学习

作者&#xff1a;杨文深度神经网络由许多单独的神经元组成&#xff0c;它们以复杂且违反人直觉的方式组合起来&#xff0c;以解决各种具有挑战性的任务。这种复杂性一方面赋予神经网络神秘力量&#xff0c;另一方面&#xff0c;也让它们变成了人类难懂的黑匣子。了解神经网络的…

python动态验证码_Python 模拟生成动态产生验证码图片的方法

模拟动态产生验证码图片模拟生成验证码&#xff0c;首先要做的是生成随机的字母&#xff0c;然后对字母进行模糊处理。这里介绍一下 Python 提供的 Pillow 模块。PillowPIL&#xff1a;Python Image Library&#xff0c;Python 的图像处理标准库&#xff0c;功能强大。PIL 是第…

图解 CSS (1): 先做一个样式表测试工具

一直没有把样式表系统一下, 春节假期有空, 不能再等了.为了方便学习, 先写了一个样式表测试工具: CssTest(点击下载)工具非常简单, 写了 10 行左右的代码; 运行效果图:代码文件:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, …

Java加密与解密的艺术~数字证书~模型分析

1、证书签发 数字证书需要经由认证机构签发&#xff0c;其流程如图&#xff1a; 数字证书的颁发流程可简述为如下过程&#xff1a; 1&#xff09;、由数字证书需求方产生自己的密钥对。 2&#xff09;、由数字证书需求方将算法、公钥和证书申请者身份信息传送给认证机构。…

公告!2018年度国家科技奖提名公示,信息科学组获47项提名

作者&#xff1a;杨文3 月 23 日&#xff0c;国家科学技术奖励工作办公室发布第 89 号公告&#xff1a;2018 年度国家科学技术奖提名工作已结束&#xff0c;共收到有关单位和专家提名的国家自然科学奖项目 272 项&#xff0c;技术发明奖项目 306 项 (通用项目 247 项&#xff0…

Python 虚拟环境

参考&#xff1a;http://www.cnblogs.com/wilber2013/p/4774022.html virtualenv documentation: https://virtualenv.pypa.io/en/latest/ virtualenvwrapper documentation: http://virtualenvwrapper.readthedocs.org/en/latest/http://docs.python-guide.org/en/latest/dev/…