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

    }

}  

6使用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(); 

}

}  

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将 C# 私钥转换为 Java 私钥的过程如下: 1. 首先,将 C# 私钥导出为 XML 格式。 2. 使用 Java密钥管理工具(如 Keytool)创建一个新的 Java 密钥文件。 3. 从 XML 文件中提取私钥和公钥,然后将它们转换为 Java 中的 PrivateKey 和 PublicKey 对象。可以使用 Java 的 Bouncy Castle 来完成这一步骤。 4. 将 PrivateKey 和 PublicKey 对象存储到 Java 密钥文件中。 5. 将 Java 密钥文件导出为 JKS 格式。 下面是 C# 密钥转换为 Java 密钥的示例代码: ```csharp // 导出 C# 私钥为 XML 格式 CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = "MyKeyContainer"; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams); string privateKeyXml = rsa.ToXmlString(true); // 将 XML 格式的私钥转换为 Java 私钥对象 var doc = new XmlDocument(); doc.LoadXml(privateKeyXml); var rsaParams = new RSAParameters(); rsaParams.Modulus = Convert.FromBase64String(doc.GetElementsByTagName("Modulus")[0].InnerText); rsaParams.Exponent = Convert.FromBase64String(doc.GetElementsByTagName("Exponent")[0].InnerText); rsaParams.P = Convert.FromBase64String(doc.GetElementsByTagName("P")[0].InnerText); rsaParams.Q = Convert.FromBase64String(doc.GetElementsByTagName("Q")[0].InnerText); rsaParams.DP = Convert.FromBase64String(doc.GetElementsByTagName("DP")[0].InnerText); rsaParams.DQ = Convert.FromBase64String(doc.GetElementsByTagName("DQ")[0].InnerText); rsaParams.InverseQ = Convert.FromBase64String(doc.GetElementsByTagName("InverseQ")[0].InnerText); rsaParams.D = Convert.FromBase64String(doc.GetElementsByTagName("D")[0].InnerText); RSACryptoServiceProvider rsaJava = new RSACryptoServiceProvider(); rsaJava.ImportParameters(rsaParams); // 将 Java 私钥存储到密钥中 var keyStore = KeyStore.GetInstance(KeyStore.DefaultType); keyStore.Load(null, null); keyStore.SetKeyEntry("mykey", rsaJava, null, null); var outputStream = new FileOutputStream("mykeystore.jks"); keyStore.Store(outputStream, "mypassword".ToCharArray()); outputStream.Close(); ``` 使用 Bouncy Castle 将 XML 格式的 C# 公钥转换为 Java 公钥对象的示例代码如下: ```java // 将 C# 公钥转换为 Java 公钥对象 var doc = new XmlDocument(); doc.LoadXml(publicKeyXml); var rsaParams = new RSAParameters(); rsaParams.Modulus = Convert.FromBase64String(doc.GetElementsByTagName("Modulus")[0].InnerText); rsaParams.Exponent = Convert.FromBase64String(doc.GetElementsByTagName("Exponent")[0].InnerText); RSACryptoServiceProvider rsaJava = new RSACryptoServiceProvider(); rsaJava.ImportParameters(rsaParams); var publicKey = rsaJava.ExportParameters(false); // 将 Java 公钥存储到密钥中 var keyStore = KeyStore.GetInstance(KeyStore.DefaultType); keyStore.Load(null, null); keyStore.SetCertificateEntry("mycert", new X509Certificate()); keyStore.SetKeyEntry("mykey", publicKey, null, null); var outputStream = new FileOutputStream("mykeystore.jks"); keyStore.Store(outputStream, "mypassword".ToCharArray()); outputStream.Close(); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值