以下就是签名工具类—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相关推荐

  1. SHA1签名工具类java

    SHA1签名工具类java package com.net.util;import java.security.MessageDigest; import java.util.Iterator; im ...

  2. java签名软件_Java实现签名工具类

    一 点睛 签名和验证签名常常用于网络安全,在此提供一个工具类. 二 代码 package com.imooc.demo.common.util; import org.apache.commons.c ...

  3. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  4. ipa签名软件_/应用推荐|全新IPA签名工具,天天签;免费使用!

       天天签 iOS版 适用平台:iOS(兼容iPad) 目前市面签名工具类app也比较多,当然哪个用得顺手就用哪个吧,之前上架App Store和TF的软件也都基本下架完了,想要下载的网页也找不到地 ...

  5. (持续更新, 目前含100+工具类) DevUtils 是一个 Android 工具库

    DevUtils Github About (持续更新, 目前含100+工具类) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用. ...

  6. JAVA接口签名sign生成工具类

    签名规则 1.线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret 2.加入timestamp(时间戳),10分钟内数据有效 3.加入流水号nonce(防止 ...

  7. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

  8. RSA公私钥生成、加解密、签名及验签的原理及工具类

    目录 一.RSA简介 二.加密.签名区别 三.公私钥生成 四.RSA工具类 一.RSA简介 非对称加密算法,由一对密钥(公钥-私钥)来进行加密-解密.签名-验签的过程.公钥-私钥的生成与数学相关,算法 ...

  9. 生成sign(签名),以及校验工具类

    生成sign(签名),以及校验工具类 package cn.weixiuhui.support.comm.utils; import java.io.IOException; import java. ...

  10. 阿里云实人认证生成签名SignNature工具类

    此类是有时间写的,使用阿里云给出的demo测试正确.实际在调用阿里云的实人认证接口时并未用到,可直接集成相关的sdk. 代码 package cn.com.chnsys.utils;import ja ...

最新文章

  1. glReadPixels的用法和说明
  2. TheBeerHouse 网站项目学习笔记(5)---架构设计
  3. select、poll、epoll之间的区别(搜狗面试)
  4. OrderOnline——设计概述
  5. 华为郑叶来:致敬开发者,共创“ AI ”的世界
  6. [Poi2000]公共串 hustoj2797
  7. 46. PHP 数据库
  8. 【Direct3D - 6】DirectX有哪些组件?
  9. java 查看jar包内容_jar文件怎么打开?如何查看jar文件内容?
  10. 原生ajax如何跨域,原生ajax 如何解决cors跨域问题
  11. mysql每组排序后取前2条,并修改数据
  12. 回文素数(10亿)—— unfinished
  13. Java 省市区三级联动
  14. Awesome Quant
  15. 【Maven】私服搭建与使用:nexus,repository,mirror,distributionManagement
  16. vue和jquery实现动态轮播table
  17. 学习一个Cena和Lemon的SPJ
  18. 【Electronics】基于锁相环CD4046的数字频率合成器
  19. 树莓派 pi zero 上网记
  20. 区块链+金融崛起 京东金融研究院发布区块链金融应用白皮书

热门文章

  1. Dllmain的作用
  2. 互联网晚报 | 12月13日 星期一 | 百度将发布元宇宙产品“希壤”;吉利发布国内首款7nm汽车芯片;腾讯云财税管家正式发布...
  3. 第三届中青杯B题思路
  4. Java接入腾讯云短信接口
  5. 数据仓库模型设计与工具
  6. 曲率系列1:曲率、法曲率、平均曲率、主曲率和高斯曲率(概念推导解读)
  7. 数字信号处理C语言——离散傅里叶变换DFT/离散傅里叶反变换IDFT
  8. 基于uniapp的QQ小程序开发(前端篇)
  9. 网络参数配置与常用网络命令使用
  10. 大数据入门书籍推荐以及Hive学习资料