1 Java程序列出密钥库所有条目

import java.util.*;

import java.io.*;

import java.security.*;

public class ShowAlias{

public static void main(String args[ ]) throws Exception{

String pass="080302";

String name=".keystore";

FileInputStream in=new FileInputStream(name);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,pass.toCharArray());

Enumeratione=ks.aliases( );

while( e.hasMoreElements()) {

System.out.println(e.nextElement());

}

}

}

2 Java程序修改密钥库口令

import java.io.*;

import java.security.*;

public class SetStorePass{

public static void main(String args[ ]) throws Exception{

char[ ] oldpass="080302".toCharArray();

char[ ] newpass="123456".toCharArray();

String name=".keystore";

FileInputStream in=new FileInputStream(name);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,oldpass);

in.close();

FileOutputStream output=new FileOutputStream(name);

ks.store(output,newpass);

output.close();

}

}

3 Java程序修改密钥库条目的口令及添加条目

package test;

import java.io.*;

import java.security.*;

import java.security.cert.Certificate;

public class SetKeyPass{

public static void main(String args[ ]) throws Exception{

//读取相关参数

String name=".keystore";

String alias="mykey";

char[ ] storepass="123456".toCharArray();

char[ ] oldkeypass="080302".toCharArray();

char[ ] newkeypass="123456".toCharArray();

//获取密钥库.keystore的KeyStore对象,并加载密钥库

FileInputStream in=new FileInputStream(name);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,storepass);

//获取别名对应的条目的证书链

Certificate[ ] cchain=ks.getCertificateChain(alias);

//读取别名对应的条目的私钥

PrivateKey pk=(PrivateKey)ks.getKey(alias,oldkeypass);

//向密钥库中添加新的条目

ks.setKeyEntry(alias,pk,newkeypass,cchain);

in.close();

//将KeyStore对象内容写入新文件

FileOutputStream output=new FileOutputStream("333");

ks.store(output,storepass);

output.close();

}

}

4 Java程序检验别名及删除条目

package test;

import java.io.*;

import java.security.*;

public class DeleteAlias{

public static void main(String args[ ]) throws Exception{

String pass = "123456";

String name = ".keystore";

String alias = "mykey";

FileInputStream in=new FileInputStream(name);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,pass.toCharArray());

if (ks.containsAlias(alias)){

ks.deleteEntry(alias);

FileOutputStream output=new FileOutputStream(name);

ks.store(output,pass.toCharArray());

System.out.println("Alias "+alias+" deleted");

}else{

System.out.println("Alias not exist");

}

}

}

5 使用Java程序将已签名的数字证书导入密钥库

首先读取CA的证书mytest.cer和用户收到的签名后的证书lf_signed.cer(由CA私钥签发),使用这两个证书组成证书链,然后从用户的密钥库读取私钥,最后执行KeyStore对象的setKeyEntry( )方法将私钥和证书一起写入密钥库,并使用store( )方法保存为文件即可。

import java.io.*;

import java.security.*;

import java.security.cert.*;

/*

* CA证书,已经签名的用户数字证书,用户密钥库名和密码以及相应证书的私钥名称,新生成的证书名称和密钥库名以及密码

*/

public class ImportCert{

public static void main(String args[ ]) throws Exception{

//参数

String cacert="new.cer";

String lfcert="hqy.cer";

String lfstore="mykeystore";

char[] lfstorepass="080302".toCharArray( );

char[] lfkeypass="080302".toCharArray( );

//CA的证书

CertificateFactory cf=CertificateFactory.getInstance("X.509");

FileInputStream in1=new FileInputStream(cacert);

java.security.cert.Certificate cac=cf.generateCertificate(in1);

in1.close();

//用户的签名证书

FileInputStream in2=new FileInputStream(lfcert);

java.security.cert.Certificate lfc=cf.generateCertificate(in2);

in2.close();

//证书链

java.security.cert.Certificate[] cchain={lfc,cac};

//用户的密钥库

FileInputStream in3=new FileInputStream(lfstore);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in3,lfstorepass);

PrivateKey prk=(PrivateKey)ks.getKey("new",lfkeypass);

//导入证书

ks.setKeyEntry("new_signed",prk,lfstorepass,cchain);

//保存密钥库

FileOutputStream out4=new FileOutputStream("nostore");

ks.store(out4,"080302".toCharArray());

out4.close();

}

}

Java程序实现密钥库的维护的更多相关文章

  1. keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore

    通过Android Studio编译器获取SHA1 第一步.打开Android Studio的Terminal工具 第二步.输入命令:keytool -v -list -keystore keysto ...

  2. Java工具创建密钥库,用于Unity 3D打包、签名、发布

    Java工具创建密钥库 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...

  3. java程序员认证考试题库

    第一部分 基础知识练习 目标 本章对应于<学生指南>各章的内容分别提供了练习题集,包括: ●  第一章Java入门 ●  第二章数据类型和运算符 ●  第三章流程控制与数组 ●  第四章封 ...

  4. java程序员应该熟悉的20个有用的库(转)

    优秀且经验丰富的Java开发人员的一个特点是API的广泛知识,包括JDK和第三方库.我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Blo ...

  5. Java程序员应该知道的20个有用的lib开源库

    一般一个经验丰富的开发者,一般都喜欢使用开源的第三方api库来进行开发,毕竟这样能够提高开发效率,并且能够简单快速的集成到项目中去,而不用花更多的时间去在重复造一些无用的轮子,多了解一些第三方库可以提 ...

  6. 【转载】Java密钥库及keytool使用详解

    ---------------- 版权声明:本文为CSDN博主「adrninistrat0r」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https: ...

  7. Java 库:为 Java 程序员而生的 10 + 最佳库

    众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...

  8. JAVA程序通过JNI调用C/C++库

    java程序如何调用c/c++库中的函数主要分为三个步骤: 1. 加载库文件. System.loadLibrary 2. 找到函数( java函数<----映射---->c函数 ) 3. ...

  9. 将.cer证书导入java密钥库?

    导入.cer从浏览器下载的证书文件(打开网址并挖掘详细信息)到cacerts keystore中java_home\jre\lib\security为我工作,而不是尝试生成和使用我自己的密钥库. 去你 ...

随机推荐

  1. Bakery CodeForces - 707B (最短路的思路题)

    Masha wants to open her own bakery and bake muffins in one of the n cities numbered from 1 to n. The ...

  2. [2]树的DFS序

    定义: 树的DFS序就是在对树进行DFS的时候,对树的节点进行重新编号:DFS序有一个很强的性质: 一颗子树的所有节点在DFS序内是连续的一段, 利用这个性质我们可以解决很多问题. 代码: void ...

  3. 【BZOJ 1853】 1853: [Scoi2010]幸运数字 (容斥原理)

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2472  Solved: 911 Description 在中国 ...

  4. codevs 2173 忠诚

    2173 忠诚  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond   题目描述 Description 老管家是一个聪明能干的人.他为财主工作了整整10年,财 ...

  5. hihocoder #1076 与链 dp

    直接背包不可做 我们只需要知道每个数位上有多少个$1$,那么我们就能构造出解 因此,我们对每一位讨论, 可以拆出$n + \frac{n}{2} + \frac{n}{4} + ... = 2n$个物 ...

  6. luoguP3232 [HNOI2013]游走 贪心 + 概率期望 + 高斯消元

    首先,题目中的无向简单连通图代表着没有自环,重边... 总分的期望 = 每条边的期望之和...................每条边的期望又可以拆成$u \to v$的期望和$v \to u$的期望 ...

  7. redisson实现基于业务的互斥锁

    虽然数据库有锁的实现,但是有时候对于数据的操作更需要业务层控制. 这个解决的问题有次面试被问到过,当时不知道怎么解决,乱说一通,今天也算是有个解决方案了 项目中有个需求,就是订单需要经过一层一层的审核 ...

  8. bzoj 2440

    题意:有一个从小到大的由不包含平方约数的数组成的数列,从1开始,求第k项. “满足某种限制的数的第k个”+二分答案="前n个数有多少个数满足限制“ 求[1,n]中有多少个数没有平方约数,我们 ...

  9. 04-RocketMQ入门及其使用(一)

    视频开始主要介绍数据库逻辑以及分表相关的设计. 关键的数据库读写分析操作---

  10. Python 实现简单的感知机算法

    感知机 随机生成一些点和一条原始直线,然后用感知机算法来生成一条直线进行分类,比较差别 导入包并设定画图尺寸 import numpy as np import matplotlib.pyplot a ...