PrivateKey私匙获取,签名生成
近来有一个加密加签的需求,需要对数据加密传出去。学到了很多,记录一下。
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私匙获取,签名生成相关推荐
- java 公匙私匙_Java生成非对称型加密公钥和私钥的方法
本文实例讲述了Java生成非对称型加密公钥和私钥的方法.分享给大家供大家参考.具体如下: 非对称型加密非常适合多个客户端和服务器之间的秘密通讯,客户端使用同一个公钥将明文加密,而这个公钥不能逆向的解密 ...
- API接口签名生成算法和签名验证算法
1.参考网上资料和书本资料,实现了API接口签名生成算法和签名验证算法. (1)参考资料:https://www.jianshu.com/p/d47da77b6419 (2)参考书籍:高级软件架构师教 ...
- python 工行e企付、工行签名生成、工行私钥PKCS8转PKCS1例子
工行有java.python.C#的SDK,项目是用python写的,遇到的坑先列举起来 1.工行给的私钥是PKCS8格式,这个是java专用的,其他语言需要转为PKCS1格式,推荐网上是链接: 在线 ...
- php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)
/组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...
- 【转】关于微信开发者平台移动应用获取签名解决问题
你看到的这个文章来自于http://www.cnblogs.com/ayanmw 在微信开放平台,申请移动应用的时候: https://open.weixin.qq.com/cgi-bin/appcr ...
- 关于微信开发者平台移动应用(android)获取签名问题
在微信开放平台注册应用时,需要填写应用签名,但是这个应用签名不是如下面的方式获取. keytool -list -v -keystore keystore地址 而是使用微信开放平台提供的签名生成工具获 ...
- 微信支付V3版本的 签名生成,验签,解密,统一下单的简单封装
微信支付 V3版本的 签名生成,验签,解密,统一下单的简单封装 V3Base 获取平台证书 回调报文解密 统一下单 暂时看了文档只完成了这部分,感觉封装的不是特别完美,希望有大佬指点一下,想着封装好一 ...
- 微信开放平台 安卓Android 应用签名生成
拿到开发给的文件: 查询keystore的MD5 可以在运行窗口,定位到keystore所在的路径,执行下面这条语句后就能显示Key的所有信息 keytool -list -v -keystore x ...
- PHP 微信支付v3签名生成
签名生成方法 // 解析url $url_parts = parse_url($url); $canonical_url = ($url_parts['path'] . (!empty($url_pa ...
最新文章
- webform repeater
- 诵经嘴巴机器人入驻蓬皮杜艺术中心,MIT艺术家出品,网友:看到的第一眼我就想歪了...
- 快速融入新团队的一点个人体会
- CSDN、博客园等6大技术博客平台的写作体验测评 1
- wps多人协作后怎么保存_白酒开瓶后怎么保存?
- AJAX实例二:实现类似Google的搜索提示【原著】
- 20190820 On Java8 第十章 接口
- Equals() 和 运算符 == 重载准则 (C# 编程指南)
- vc++HOOK API黑客外挂编程必知必会
- android动画 底部弹窗 效果
- 单源最短路(spfa+Dijkstra)附数据
- 还在烦恼没有项目?手把手带你从 0 开始用 React 重写学成在线 II
- Java 随机生成MAC地址
- 【异构图->精读】Heterogeneous Graph Attention Network
- WinRAR 被曝严重安全漏洞;苹果预计推出跨平台应用
- js实现整体,局部刷新
- 【论文理解】理解yolov3的anchor、置信度和类别概率
- C语言调用libusb访问USB驱动
- DEVOPS架构师 -- 03Kubernetes进阶实践
- java并发编程实战wwj----------第二阶段-------------classloader----------------42-55