java读取微信p12证书信息

import java.security.*;
import java.security.cert.X509Certificate;
public class TestController {
/*** 获取私钥*/public static void main(String args[]) throws Exception {String mchId = "商户号";KeyStore ks = KeyStore.getInstance("PKCS12");ks.load(getCertStream(""), mchId.toCharArray());String alias = ks.aliases().nextElement();X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);java.util.Date notBefore = certificate.getNotBefore(); // 证书开始有效日期java.util.Date notAfter = certificate.getNotAfter(); // 证书结束有效日期String serialNo = certificate.getSerialNumber().toString(16).toUpperCase();PrivateKey privateKey = (PrivateKey) ks.getKey(alias, mchId.toCharArray());System.out.println("证书开始有效日期:" + notBefore);System.out.println("证书结束有效日期:" + notAfter);System.out.println("---------serialNo------" + serialNo);System.out.println("---------privateKey--------" + privateKey);}/*** 读取证书*/public static InputStream getCertStream(String certPath) {byte[] certData = null;try {//通过路径读取//InputStream certStream = new FileInputStream(new File(certPath));//放到项目resources目录读取InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("apiclient_cert.p12");certData = IOUtils.toByteArray(certStream);certStream.close();} catch (Exception e) {e.printStackTrace();}ByteArrayInputStream certBis = new ByteArrayInputStream(certData);return certBis;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

倚天屠龙:Github Copilot vs Cursor

武林至尊,宝刀屠龙。号令天下,莫敢不从。倚天不出,谁与争锋! 作为开发人员吃饭的家伙,一款好的开发工具对开发人员的帮助是无法估量的。还记得在学校读书的时候,当时流行CS架构的RAD,Delphi和V…

香港虚拟信用卡如何办理,支持香港apple id

什么是虚拟信用卡? 虚拟信用卡,英文称之为Virtual Credit Card Numbers,就是指没有实体卡片,是基于银行卡上面的BIN码所生成的虚拟账号。通常用于进行网络交易,使用起来很方便,也很安全。 它与实体信用卡…

虚函数不能声明为static

虚函数申明为static报错 class Foo { public:Foo()default;static virtual ~Foo(){} };int main() {Foo foo;return 0; };main.cpp:10:25: error: member ‘~Foo’ cannot be declared both virtual and static static virtual ~Foo() 代码编译会报错,不允许同时声…

vue之mixin混入

vue之mixin混入 mixin是什么? 官方的解释: 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的…

热门文章采集器【2023】

自媒体成为了许多人追逐的梦想,而爆文则是迈向成功的关键一步。随着越来越多的内容涌现,如何找到独特而引人注目的素材成为了自媒体创作者们面临的难题。本文将深入讲解当下热门的文章采集器,分享使用过的工具经验。 1.文章采集器的作用&…

DevOps搭建(三)-Git安装详细步骤

前面两篇文章我们讲了如何安装swappiness安装和虚拟机。这篇我们详细讲下如何安装Git。 1、YUM源更改为阿里云镜像源 1.1、备份CentOS-Base.repo 先备份原有的 CentOS-Base.repo 文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup…

RAR解压软件|怎么解压文件?|软件教学

咱说正事,之前不是给大家推荐了几个解压软件吗。 但是发现很多小伙伴下载了不会用,所以!我来了! 之前推荐的解压精灵,真的超级方便!我们一般打开压缩文件需要先解压才能查看,很多人都是把文件传…

YOLOv8最新结构改进:首发最新改进,极简高效,UniRepLKNet作为改进升级版RepLKNet(博客内附源代码),适用于图像识别,即插即用打破性能瓶颈

💡本篇内容:YOLOv8最新结构改进:首发最新改进,极简高效,RepLKNet改进升级版UniRepLKNet(博客内附源代码),适用于图像识别,即插即用打破性能瓶颈 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二…

C 中的指针 - 数组和字符串

0. 为什么是指针和数组? 在C语言中,指针和数组有着非常密切的关系。应该将它们放在一起讨论的原因是,使用数组表示法 ( arrayName[index]) 可以实现的功能也可以使用指针实现,通常速度更快。 1. 一维数组 让我们看看当我们写的…

简谈PostgreSQL的wal_level=logic

一、PostgreSQL的wal_levellogic的简介 wal_levellogic 是 PostgreSQL 中的一个配置选项,用于启用逻辑复制(logical replication)功能。逻辑复制是一种高级的数据复制技术,它允许您将变更(例如插入、更新和删除&#…

Linux系统中进程间通信(Inter-Process Communication, IPC)

文章目录 进程间通信介绍进程间通信目的进程间通信发展 管道什么是管道 匿名管道用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则管道特点 命名管道创建一个命名管道匿名管道与命名管道的区别命名管道的打开规则 命名管道的删除用命名管…

Shopify二次开发之三:liquid语法学习(访问Objects和Schema数据模型)

目录 Objects (对象) 全局对象 all_products:商店中所有的商品 articles: 商店中的所有文章 collections:商店中所有的集合 模板对象 在product.json(配置的section中) 访问product对象 在collection.json中可…

40. 组合总和 II

题目描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 **注意:**解集不能包含重复的组合。 示例 1: 输入: candidates…

Android之 知识总结第二篇

一, Gradle 、AGP(Android Gradle Plugin)、 buildTools分别是什么,他们之间什么关系? Gradle Gradle是基于JVM的构建工具。他本身使用jave写的,gradle的脚本也就是build.gradle通常是用groovy语言。Android BuildTools Android S…

1D和2D布朗运动matlab

布朗运动是一种随机现象,下面的M函数brwnm2.m给出了二维Brown运动,其中[t0,tf]是时间区间,h是采样步长,w(t),z(t)是布朗运动。function [t,w,z]brwnm2(t0,tf,h) tt0:h:tf; xrandn(size(t))*sqrt(h); yrandn(size(t))*s…

LightDB - 支持quarter 函数[mysql兼容]

LightDB 从23.4版本开始支持 quarter 函数。 简介 quarter 函数用来确定日期对应的季度, 如 ‘20231204’ 对应12月,也就是第四季度。 下面为mysql8.0中描述 Returns the quarter of the year for date, in the range 1 to 4, or NULL if date is NUL…

二叉树题目:二叉树的完全性检验

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:二叉树的完全性检验 出处:958. 二叉树的完全性检验 难度 5 级 题目描述 要求 给定一个二叉树的根结点 root \texttt{root} root&…

C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)

目录 一、创建Graphics对象 1.创建Pen对象 2.创建Brush对象 (1)SolidBrush类 (2)HatchBrush类 ​​​​​​​(3)LinerGradientBrush类 用户界面上的窗体和控件非常有用,且引人注目&#…

销售人员一定要知道的6种获取电话号码的方法

对于销售来说,电话销售是必须要知道的销售方法,也是销售生涯中的必经之路。最开始我们并不清楚这么电话是从哪里来的,也不清楚是通过哪些方法渠道获取。那么今天就来分享给各位销售人员获取客户电话号码的方法。 1.打印自己的名片&#xff0…

CSS实现一些小功能

1.信封边框的实现 1.1 使用背景渐变 <!DOCTYPE html><html><head><meta charset"UTF-8"><title></title><style type"text/css">.uu {width: 200px;height: 70px;padding:1em;border: 1em solid transparent;…