java程序实现对密钥库的管理

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程序从密钥库直接读取证书

import java.io.*;

import java.security.*;

import java.security.cert.Certificate;

public class PrintCert2{

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

          String pass="080302";

          String alias="mykey";

          String name=".keystore";

          FileInputStream in=new FileInputStream(name);

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

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

          Certificate c=ks.getCertificate(alias);

          in.close();

         System.out.println(c.toString( ));

    }

}
时间: 2024-11-05 20:38:27

java程序实现对密钥库的管理的相关文章

java程序员认证考试题库

第一部分 基础知识练习 目标 本章对应于<学生指南>各章的内容分别提供了练习题集,包括: ●  第一章Java入门 ●  第二章数据类型和运算符 ●  第三章流程控制与数组 ●  第四章封装 ●  第五章继承 ●  第六章抽象类与接口 ●  第七章多态 ●  第八章异常 ●  第九章多线程机制 ●  第十章输入输出流 ●  第十一章使用泛型和集合框架 ●  第十二章基于Swing的图形用户界面(GUI)设计 ●  第十三章Java事件驱动编程 第一章练习题(Java入门) 1.下列哪项不是JD

Java程序员修炼之道 之 单元测试

序 单元测试是一个非常好用的工具,是一个Java程序员修养的一部分.从04年开始,我就开始在项目实践中使用单元测试.十几年来,参与的项目基本上都或多或少的使用了单元测试,多的能有100%覆盖率的要求,少的也要覆盖主要代码,发现这个实践在提高软件质量和开发速度上还是很有好处的.在和朋友同事的交流中,发现有很多项目没有使用单元测试,也有很多程序员不会写单元测试,但是大家对这个都很有兴趣.所以我想把自己掌握的关于单元测试的技能(架构.设计和技术)和实施策略分享一下.当然,要是有那个企业愿意要求我去做相

编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议98~101)

建议98:建议的采用顺序是List<T>.List<?>.List<Object> List<T>.List<?>.List<Object>这三者都可以容纳所有的对象,但使用的顺序应该是首选List<T>,次之List<?>,最后选择List<Object>,原因如下: (1).List<T>是确定的某一个类型 List<T>表示的是List集合中的元素都为T类型,具体类型在

【Java程序员修炼之道 之 单元测试】

单元测试是一个非常好用的工具,是一个Java程序员修养的一部分.从04年开始,我就开始在项目实践中使用单元测试.十几年来,参与的项目基本上都或多或少的使用了单元测试,多的能有100%覆盖率的要求,少的也要覆盖主要代码,发现这个实践在提高软件质量和开发速度上还是很有好处的.在和朋友同事的交流中,发现有很多项目没有使用单元测试,也有很多程序员不会写单元测试,但是大家对这个都很有兴趣.所以我想把自己掌握的关于单元测试的技能(架构.设计和技术)和实施策略分享一下.当然,要是有那个企业愿意要求我去做相关的

CSDN日报20170320——《Java 程序员的面试经历和题库》

[程序人生]Java 程序员的面试经历和题库 作者:nuaazhaofeng 最近打算换城市了,受不了北京的雾霾了,所以准备逃离啦.所以一直在面试中,整理了下最近遇到的一些面试题,供大家参考.其中会包含一些面试的小经验,如果您是面霸,希望能给予指导.自己不是大牛,如果您是大牛,也可以忽略之.我面试的岗位是Java后端开发工程师. [Python]7行Python代码的人脸识别 作者:半吊子全栈工匠 随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿.AI涉及的领域众多,图像识别中的

Java操作密钥库入门

1.用Java keytool这个密钥和证书管理工具,创建一个密钥并存入.keystore文件中,如下图,默认会存在一个别名为"mykey"的条目,也可以自己创建. 2.创建KeyStore实例,从.keystore文件中加密密钥库,而后通过别名来获取对应的条目,一定要制定正确的密码. public class KeyStoreTest { public static void main(String[] args) throws Exception{ // 加载密钥库文件 FileI

Java 密钥库和数字证书

密钥库中可以存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分. 1.cd C:\Program Files (x86)\Java\jdk1.6.0_10\bin 2.生成签名证书:keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 20000 [-genkey:生成密钥] [-keystore:指定存储位置可加上路径C:\Users\dxcb\android

JMX——以可视化形式管理与监控正在运行中的Java程序

简单理解: MBean:管理的最小单元,一个MBean就是一个可以被监控的JavaBean. MBeanServer:一个池子,各个MBean都会注册到该池子中,并且该池子提供一系列的管理.监控API. MBeanAgent:负责将MBean注册到MBeanServer中,并且定义JMXServiceURL和JMXConnectorServer,使得我们可以使用该url,通过web.RMI.Jconsole等各种形式进行远程监控和管理Java程序. 具体实现参考: https://blog.cs

Java程序员必备技能内存管理机——垃圾标记

正文 1.怎么找到存活对象? 通过上篇文章我们知道,JVM创建对象时会通过某种方式从内存中划分一块区域进行分配.那么当我们服务器源源不断的接收请求的时候,就会频繁的需要进行内存分配的操作,但是我们服务器的内存确是非常有限的呢!所以对不再使用的内存进行回收再利用就成了JVM肩负的重任了! 那么,摆在JVM面前的问题来了,怎么判断哪些内存不再使用了?怎么合理.高效的进行回收操作?既然要回收,那第一步就是要找到需要回收的对象! 1.1.引用计数法 实现思路:给对象添加一个引用计数器,每当有一个地方引用