近来有一个加密加签的需求,需要对数据加密传出去。学到了很多,记录一下。

1:证书获取私匙

由于是对老代码的维护,所以之前是写好的。原代码逻辑是从证书中获取密钥。

证书为pfx后缀的文件,可使用keytool证书管理工具生成。具体创建可参考这篇博客:java获取安全证书名_java 生成本地ssl安全证书 springboot配置_LHZ5388015210的博客-CSDN博客

具体处理代码为:

//读取证书
InputStream in = new FileInputStream("//***.pfx");
//获取指定类型的密匙库(KeyStore是证书和私匙的存储设施)
KeyStore keystore = KeyStore.getInstance("PKCS12");
//解锁证书
keystore.load(证书文件,密码(字符数组));
//获取密匙库所有别名
Enumeration<String> enumeration = keystore.aliases();String alias = null;
PrivateKey privateKey = null;//遍历元素
while(enumeration.hasMoreElements()) {alias = ((String)enumeration.nextElement()).toString();Key key = keystore.getKey(alias, 密码(字符数组));if (key != null && key instanceof PrivateKey) {privateKey = (PrivateKey)key;break;}
}

2:PKCS8EncodedKeySpec加载密匙

PKCS8EncodedKeySpec类使用PKCS#8标准作为密钥规范管理的编码格式,以编码格式来表示私钥。目前多使用这种方式。

1:首先定义私匙字符串,例如

2:获取私匙

//获得私钥密钥字节数组
byte[] keyBytes = Base64Utils.decode(privateKey);
//PKCS8EncodedKeySpec类使用PKCS#8标准作为密钥规范管理的编码格式,以编码格式来表示私匙
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
//获取指定算法的密匙工厂实例(算法有很多,根据实际需求选择)
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
//使用密匙材料生成私匙对象
PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);

3:生成签名

使用Signature对象生成签名。这里放出签名算法及流程,供参考。

//获取指定算法的签名实例(如:SHA1WithRSA)
Signature signature = Signature.getInstance(“SHA1WithRSA”);
//添加生成签名的私匙及数据
signature.initSign(私匙对象PrivateKey);
signature.update(data.getBytes(StandardCharsets.UTF_8));
//生成签名
byte[] sign = signature.sign();
//把字节数组形式的签名转换成16进制
String signStr = ByteUtil.bytesToHexString(signed);


至此,获取私匙并生成签名就完成了,这里只做简单演示,实际使用还是要看业务需求,酌情使用。

PrivateKey私匙获取,签名生成相关推荐

  1. java 公匙私匙_Java生成非对称型加密公钥和私钥的方法

    本文实例讲述了Java生成非对称型加密公钥和私钥的方法.分享给大家供大家参考.具体如下: 非对称型加密非常适合多个客户端和服务器之间的秘密通讯,客户端使用同一个公钥将明文加密,而这个公钥不能逆向的解密 ...

  2. API接口签名生成算法和签名验证算法

    1.参考网上资料和书本资料,实现了API接口签名生成算法和签名验证算法. (1)参考资料:https://www.jianshu.com/p/d47da77b6419 (2)参考书籍:高级软件架构师教 ...

  3. python 工行e企付、工行签名生成、工行私钥PKCS8转PKCS1例子

    工行有java.python.C#的SDK,项目是用python写的,遇到的坑先列举起来 1.工行给的私钥是PKCS8格式,这个是java专用的,其他语言需要转为PKCS1格式,推荐网上是链接: 在线 ...

  4. php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)

    /组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...

  5. 【转】关于微信开发者平台移动应用获取签名解决问题

    你看到的这个文章来自于http://www.cnblogs.com/ayanmw 在微信开放平台,申请移动应用的时候: https://open.weixin.qq.com/cgi-bin/appcr ...

  6. 关于微信开发者平台移动应用(android)获取签名问题

    在微信开放平台注册应用时,需要填写应用签名,但是这个应用签名不是如下面的方式获取. keytool -list -v -keystore keystore地址 而是使用微信开放平台提供的签名生成工具获 ...

  7. 微信支付V3版本的 签名生成,验签,解密,统一下单的简单封装

    微信支付 V3版本的 签名生成,验签,解密,统一下单的简单封装 V3Base 获取平台证书 回调报文解密 统一下单 暂时看了文档只完成了这部分,感觉封装的不是特别完美,希望有大佬指点一下,想着封装好一 ...

  8. 微信开放平台 安卓Android 应用签名生成

    拿到开发给的文件: 查询keystore的MD5 可以在运行窗口,定位到keystore所在的路径,执行下面这条语句后就能显示Key的所有信息 keytool -list -v -keystore x ...

  9. PHP 微信支付v3签名生成

    签名生成方法 // 解析url $url_parts = parse_url($url); $canonical_url = ($url_parts['path'] . (!empty($url_pa ...

最新文章

  1. webform repeater
  2. 诵经嘴巴机器人入驻蓬皮杜艺术中心,MIT艺术家出品,网友:看到的第一眼我就想歪了...
  3. 快速融入新团队的一点个人体会
  4. CSDN、博客园等6大技术博客平台的写作体验测评 1
  5. wps多人协作后怎么保存_白酒开瓶后怎么保存?
  6. AJAX实例二:实现类似Google的搜索提示【原著】
  7. 20190820 On Java8 第十章 接口
  8. Equals() 和 运算符 == 重载准则 (C# 编程指南)
  9. vc++HOOK API黑客外挂编程必知必会
  10. android动画 底部弹窗 效果
  11. 单源最短路(spfa+Dijkstra)附数据
  12. 还在烦恼没有项目?手把手带你从 0 开始用 React 重写学成在线 II
  13. Java 随机生成MAC地址
  14. 【异构图->精读】Heterogeneous Graph Attention Network
  15. WinRAR 被曝严重安全漏洞;苹果预计推出跨平台应用
  16. js实现整体,局部刷新
  17. 【论文理解】理解yolov3的anchor、置信度和类别概率
  18. C语言调用libusb访问USB驱动
  19. DEVOPS架构师 -- 03Kubernetes进阶实践
  20. java并发编程实战wwj----------第二阶段-------------classloader----------------42-55

热门文章

  1. Android实现个人中心设置界面
  2. 无向图全局最小边割集
  3. 用Cocos Creator 模拟书本翻页效果
  4. DQM Serial Sync Index Program ERROR
  5. ubuntu自动重连l2tp并转发
  6. 用python在excel中做批量计算(包括单元格为空值时的处理情况)
  7. 大恒相机文件配置V1.1
  8. 树莓派上搭建rtsp流媒体服务器
  9. 深入 WEP和 WPA密码原理
  10. vue手机端项目php,MintUI基于Vue.js移动端组件库详解