一、前言

通过之前定义RSAUtil工具类可以生成获取rsa非对称公私钥,基于私钥我们通过将字符串进行加签加密,再通过公钥进行解密验证,详情参见RSASignUtil代码工具类示例。

二、代码示例import java.security.KeyFactory;@b@import java.security.PrivateKey;@b@import java.security.PublicKey;@b@import java.security.Signature;@b@import java.security.spec.PKCS8EncodedKeySpec;@b@import java.security.spec.X509EncodedKeySpec;@b@@b@public class RSASignUtil {@b@@b@private static final String KEY_ALGORITHM = "RSA";@b@private static final String SIGNATURE_ALGORITHM = "SHA1withRSA";@b@@b@/**@b@ * 加签数据@b@ * @b@ * @param String@b@ *            data 待加签数据@b@ * @param String@b@ *            privateKey 私钥@b@ * @return String signedData 加签值(十六进制)@b@ * */@b@public static String sign(String data, String privateKey) throws Exception {@b@try {@b@byte[] signData = sign(data, hexStringToByte(privateKey));@b@@b@return byteToHexString(signData);@b@@b@} catch (Exception e) {@b@throw new Exception("signature.sign.error : " + e.getMessage());@b@}@b@}@b@@b@/**@b@ * 加签数据@b@ * @b@ * @param String@b@ *            data 待加签数据@b@ * @param byte[] privateKey 私钥@b@ * @return byte[] signedData@b@ * */@b@public static byte[] sign(String data, byte[] privateKeyBytes)@b@throws Exception {@b@@b@try {@b@PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(@b@privateKeyBytes);@b@KeyFactory keyf = KeyFactory.getInstance(KEY_ALGORITHM);@b@PrivateKey key = keyf.generatePrivate(priPKCS8);@b@@b@// 进行签名服务@b@Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);@b@signature.initSign(key);@b@signature.update(data.getBytes());@b@byte[] signData = signature.sign();@b@@b@// 返回签名结果@b@return signData;@b@} catch (Exception e) {@b@throw new Exception("signature.sign.error : " + e.getMessage());@b@}@b@}@b@@b@/**@b@ * 根据对签名数据使用签名者的公钥来解密后验证是否与原数据相同。从而确认用户签名正确@b@ * @b@ * @param String  data 被签名数据@b@ * @param String signStr 使用该用户的私钥生成的已签名数据(十六进制)@b@ * @param String   publicKey 公钥(十六进制)@b@ * @return true或false,验证成功为true。@b@ * @throws Exception@b@ */@b@public static boolean verify(String data, String signStr, String publicKey)@b@throws Exception {@b@try {@b@return verify(data, hexStringToByte(signStr),@b@hexStringToByte(publicKey));@b@} catch (Exception e) {@b@throw new Exception("signature.verify.error : " + e.getMessage());@b@}@b@}@b@@b@/**@b@ * 根据对签名数据使用签名者的公钥来解密后验证是否与原数据相同。从而确认用户签名正确@b@ * @param String   data 被签名数据@b@ * @param byte[] signStr 使用该用户的私钥生成的已签名数据@b@ * @param String  publicKey 公钥@b@ * @return true或false,验证成功为true。@b@ * @throws Exception@b@ */@b@public static boolean verify(String data, byte[] signStrBytes,@b@byte[] publicKeyBytes) throws Exception {@b@try {@b@KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);@b@PublicKey pubKey = keyFactory@b@.generatePublic(new X509EncodedKeySpec(publicKeyBytes));@b@@b@// 进行验证签名服务@b@Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);@b@signature.initVerify(pubKey);@b@signature.update(data.getBytes());@b@return signature.verify(signStrBytes);@b@} catch (Exception e) {@b@throw new Exception("signature.verify.error : " + e.getMessage());@b@}@b@}@b@@b@/**@b@ * 二进制byte[]转十六进制string@b@ */@b@public static String byteToHexString(byte[] bytes) {@b@StringBuffer sb = new StringBuffer();@b@for (int i = 0; i  3) {@b@sb.append(strHex.substring(6));@b@} else {@b@if (strHex.length()

控制台打印结果原文: @b@欢迎您光临,小木人印象http://www.xwood.net网站!!!@b@加签: @b@74ec71ecf9cb57721a68776df49360489dfaaa8e6b97e10e004ec07ce94b65d6023d0b739335aa95c737125b83060be2b74ace8e5cf33f2f7b52c181de1bb5ca8bd61c67e0cc489b993919fdbcd5cbe12bc9e825861f80c56b27e12c2fef73713d51b68fe6ab429d2ede9b1c5b7da4c8a591697de5a005d624e7aa018300ac2e@b@验签结果 : @b@true

signature=c9e077ef93038bf703dbc146dd834bb7,基于RSASignUtil非对称私钥进行字符串加签及公钥解密验证的完整代码示例...相关推荐

  1. RSA-公钥加密,私钥解密 、私钥加密,公钥解密、私钥加签,公钥验签

    https://blog.csdn.net/qq_31289187/article/details/85234044 一.案例内容: RSA 公钥加密,私钥解密:     RSA 私钥加密,公钥解密: ...

  2. 基于MATLAB的三维数据插值拟合与三次样条拟合算法(附完整代码)

    目录 一. 三维插值 例题1 二. 高维度插值拟合 格式一 格式二 格式三 格式四 格式五 例题2 三. 单变量三次样条插值 例题3 例题4 四. 多变量三次样条插值 例题6 一. 三维插值 首先三维 ...

  3. 基于机器学习的上证指数、东方股吧的股市评论情感分析 完整代码数据

    视频讲解:基于机器学习的上证指数.东方股吧的股市评论情感分析 完整代码数_哔哩哔哩_bilibili 所使用模型LinearSVC,LogisticReg,SGD,MultinomialNB,KNN, ...

  4. 基于 java Spring Boot 框架的人事管理系统的设计与实现 附完整代码+论文+ppt

    内容摘要: 人事管理在政府机关和企事业单位中占有极其重要的地位,各部门岗位之间协作和工效的提高,是人事管理的基本要求.本设计旨在实现微型人事管理信息系统,功能主要由人事在线通信.员工资料.人事信息管理 ...

  5. 基于图神经网络的异构图表示学习和推荐算法研究(完整代码+数据)

    基于图神经网络的异构图表示学习和推荐算法研究.包含基于对比学习的关系感知异构图神经网络(Relation-aware Heterogeneous Graph Neural Network with C ...

  6. 基于最小费用流(MCF)法的相位解包裹理论与实验验证-含Matlab代码

    一.引言 最小费用流算法(Minimum cost flow, MCF) 最早是由 Costantini M. A1998 年提出的,该方法是将未解缠相位的相邻梯度差与解缠相位的相邻梯度差间的差异即不 ...

  7. RSA公私钥加密加签顺序

    RSA是一种非对称加密的机制,是一对密钥对(公钥和私钥). 一.加密: 1.公钥加密,私钥解密.可以多人持有公钥进行数据加密,仅一人持有私钥进行数据解密: 2.可以确保数据传输的安全性. 二.加签: ...

  8. 为什么要用私钥加签,公钥加密

    加签的目的:验证信息的发送方是否正确,信息是否被其他人篡改. 之所以用发送方的私钥加签,是因为,即便信息被黑客拦截,黑客修改了信息,但是加签需要用发送方的私钥,黑客没有发送方的私钥,所以也无法生成正确 ...

  9. 【通信】基于非相干信号子空间测向算法实现宽带信号的测向附matlab代码

    1 简介 基于非相干信号子空间测向算法实现宽带信号的测向​ 2 完整代码 %[1]宫兵, 徐以涛, 李佳. 改进的非相干信号子空间宽带测向算法[J]. 无线电工程, 2011, 41(3):3.clc ...

最新文章

  1. CentOS装机必备-基本设置以及缺失文件
  2. 将.NET概念映射到Lightning平台
  3. 【PC工具】大神开源项目-配色调色工具Colorpicker颜色选择器
  4. Spring-data-jpa和mybatis的比较及两者的优缺点?
  5. tomcat启动分析(2)
  6. poj 1995 Raising Modulo Numbers 二分快速幂
  7. 移动工具V和选区工具M
  8. Win10下OpenCV3.2.0+VS2015配置
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的工资管理系统
  10. EL表达式结合页面JSTL使用 迭代显示表格
  11. 大一计算机期末考试操作题word,Word大一计算机考试操作题
  12. 远程teamviewer|远程工具teamviewer|远程控制软件teamviewer
  13. 分词:词性标注北大标准
  14. 校友会2019中国大学计算机,校友会2019中国大学一流专业排名800强发布,北大清华复旦前三...
  15. IDEA 不检查语法错误问题
  16. 复习总结:马克思主义基本原理概论(马原)
  17. SAP ABAP 数字类型精讲
  18. 你不曾见过的酷炫地图可视化作品(二)
  19. 乔布斯的康熙盛世,库克的雍正王朝——纪念乔布斯逝世5周年
  20. python写csv文件分隔符问题

热门文章

  1. php仿微信朋友圈网站源码,Smobiler仿微信朋友圈的消息代码实例
  2. mysql降低高水位_[数据库]数据高水位分析
  3. jquery指定节点设css,jquery 获取和设置节点属性 css样式
  4. json数据解析_shell从入门到放弃解析json数据(2)
  5. 电脑练习打字软件_练习打字软件Master of Typing 3 Mac
  6. php类实例化js,php中如何实例化一个类_后端开发
  7. Jsp页面用javascript加 滑动验证条
  8. modelsim10.1a安装破解说明
  9. linux查看设备硬件,linux查看硬件信息及驱动设备相关整理
  10. java swing工具栏_javaSwing如何创建一个有工具条和菜单的窗口