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);


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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值