签名工具类---Signature
以下就是签名工具类—Signature 源代码
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;public class License{/**得到产生的私钥/公钥对 * @return KeyPair*/public static KeyPair getKeypair(){//产生RSA密钥对(myKeyPair)KeyPairGenerator myKeyGen = null;try {// 这个myKeyGen实例就是用于:生成公钥和私钥对(而且公钥与私钥对的加密算法都是RSA算法加密)myKeyGen = KeyPairGenerator.getInstance("RSA");// 序列化myKeyGen.initialize(1024);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}KeyPair myKeyPair = myKeyGen.generateKeyPair();return myKeyPair;}/**根据私钥和信息生成签名 * @param privateKey* @param data* @return 签名的Base64编码*/public static String getSignature(PrivateKey privateKey,String data){// 实例签名Signature sign;String res = "";try {// 返回MD5,rsa算法的Signature对象sign = Signature.getInstance("MD5WithRSA");// 通过传入私钥的方式初始化签名对象sign.initSign(privateKey);// 更新待签名的数据sign.update(data.getBytes());// 返回已更新的签名字节byte[] signSequ = sign.sign();// 签名的Base64编码res = Base64.getEncoder().encodeToString(signSequ);}catch(NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvalidKeyException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SignatureException e) {// TODO Auto-generated catch blocke.printStackTrace();}return res;}/**验证签名 * @param publicKey 公钥的Base64编码 * @param sign 签名的Base64编码 * @param data 生成签名的原数据* @return*/public static boolean verify(String publicKey, String sign, String data){boolean res = true;try {// 将Base64编码进行decode反编码形成bytebyte[] keyBytes = Base64.getDecoder().decode(publicKey);// 将这个byte作为参数生成keyspecX509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);// 实例化一个RSA签名算法的密钥工厂KeyFactory keyFactory = KeyFactory.getInstance("RSA");// 生成公钥(一个使用RSA加密的算法)PublicKey publicK = keyFactory.generatePublic(keySpec);// 实例化一个signature签名,采用MD5以及RSA进行加密或者签名Signature signature = Signature.getInstance("MD5withRSA");// 通过公钥初始化验证对象signature.initVerify(publicK);// 更新要验证的数据signature.update(data.getBytes());// 验证待传入的签名res = signature.verify(Base64.getDecoder().decode(sign));}catch(NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvalidKeyException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SignatureException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvalidKeySpecException e) {// TODO Auto-generated catch blocke.printStackTrace();}return res;}/*** Signature 签名算法* @param args*/public static void main(String[] args) {String data = "给我签名吧!";/*(1)生成公钥和私钥对*/KeyPair keyPair = getKeypair();String publicKey = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded());String privateKey = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded());System.out.println("公钥:" + publicKey);System.out.println("私钥:" + privateKey);/*(2)用私钥生成签名*/PrivateKey pk = keyPair.getPrivate();String signStr = getSignature(pk,data);System.out.println("签名是:" + signStr);/*(3)验证签名*/System.out.println("验证签名的结果是:" + verify(publicKey,signStr,data));}
}
签名工具类---Signature相关推荐
- SHA1签名工具类java
SHA1签名工具类java package com.net.util;import java.security.MessageDigest; import java.util.Iterator; im ...
- java签名软件_Java实现签名工具类
一 点睛 签名和验证签名常常用于网络安全,在此提供一个工具类. 二 代码 package com.imooc.demo.common.util; import org.apache.commons.c ...
- ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。
DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...
- ipa签名软件_/应用推荐|全新IPA签名工具,天天签;免费使用!
天天签 iOS版 适用平台:iOS(兼容iPad) 目前市面签名工具类app也比较多,当然哪个用得顺手就用哪个吧,之前上架App Store和TF的软件也都基本下架完了,想要下载的网页也找不到地 ...
- (持续更新, 目前含100+工具类) DevUtils 是一个 Android 工具库
DevUtils Github About (持续更新, 目前含100+工具类) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用. ...
- JAVA接口签名sign生成工具类
签名规则 1.线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret 2.加入timestamp(时间戳),10分钟内数据有效 3.加入流水号nonce(防止 ...
- 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥
测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...
- RSA公私钥生成、加解密、签名及验签的原理及工具类
目录 一.RSA简介 二.加密.签名区别 三.公私钥生成 四.RSA工具类 一.RSA简介 非对称加密算法,由一对密钥(公钥-私钥)来进行加密-解密.签名-验签的过程.公钥-私钥的生成与数学相关,算法 ...
- 生成sign(签名),以及校验工具类
生成sign(签名),以及校验工具类 package cn.weixiuhui.support.comm.utils; import java.io.IOException; import java. ...
- 阿里云实人认证生成签名SignNature工具类
此类是有时间写的,使用阿里云给出的demo测试正确.实际在调用阿里云的实人认证接口时并未用到,可直接集成相关的sdk. 代码 package cn.com.chnsys.utils;import ja ...
最新文章
- glReadPixels的用法和说明
- TheBeerHouse 网站项目学习笔记(5)---架构设计
- select、poll、epoll之间的区别(搜狗面试)
- OrderOnline——设计概述
- 华为郑叶来:致敬开发者,共创“ AI ”的世界
- [Poi2000]公共串 hustoj2797
- 46. PHP 数据库
- 【Direct3D - 6】DirectX有哪些组件?
- java 查看jar包内容_jar文件怎么打开?如何查看jar文件内容?
- 原生ajax如何跨域,原生ajax 如何解决cors跨域问题
- mysql每组排序后取前2条,并修改数据
- 回文素数(10亿)—— unfinished
- Java 省市区三级联动
- Awesome Quant
- 【Maven】私服搭建与使用:nexus,repository,mirror,distributionManagement
- vue和jquery实现动态轮播table
- 学习一个Cena和Lemon的SPJ
- 【Electronics】基于锁相环CD4046的数字频率合成器
- 树莓派 pi zero 上网记
- 区块链+金融崛起 京东金融研究院发布区块链金融应用白皮书