栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何列出/导出密钥库中的私钥?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何列出/导出密钥库中的私钥?

最初来自Example Depot的一部分代码,用于列出密钥存储区中的所有别名:

    // Load input stream into keystore    keystore.load(is, password.toCharArray());    // List the aliases    Enumeration aliases = keystore.aliases();    for (; aliases.hasMoreElements(); ) {        String alias = (String)aliases.nextElement();        // Does alias refer to a private key?        boolean b = keystore.isKeyEntry(alias);        // Does alias refer to a trusted certificate?        b = keystore.isCertificateEntry(alias);    }

几个月前,在Sun论坛上讨论了私钥的导出问题,而u:turingcompleter提出了DumpPrivateKey类,以将其缝入您的应用程序。

import java.io.FileInputStream;import java.security.Key;import java.security.KeyStore;import sun.misc.base64Enprer;public class DumpPrivateKey {         static public void main(String[] args)    throws Exception {        if(args.length < 3) {          throw new IllegalArgumentException("expected args: Keystore filename, Keystore password, alias, <key password: default same than keystore");        }        final String keystoreName = args[0];        final String keystorePassword = args[1];        final String alias = args[2];        final String keyPassword = getKeyPassword(args,keystorePassword);        KeyStore ks = KeyStore.getInstance("jks");        ks.load(new FileInputStream(keystoreName), keystorePassword.toCharArray());        Key key = ks.getKey(alias, keyPassword.toCharArray());        String b64 = new base64Enprer().enpre(key.getEnpred());        System.out.println("-----BEGIN PRIVATE KEY-----");        System.out.println(b64);        System.out.println("-----END PRIVATE KEY-----");    }    private static String getKeyPassword(final String[] args, final String keystorePassword)    {       String keyPassword = keystorePassword; // default case       if(args.length == 4) {         keyPassword = args[3];       }       return keyPassword;    }}

注意:这使用Sun软件包,这是一件“坏事”。
如果您可以下载apache
commons代码
,则以下是无需警告即可编译的版本:

javac -classpath .:commons-prec-1.4/commons-prec-1.4.jar DumpPrivateKey.java

并会得到相同的结果:

import java.io.FileInputStream;import java.security.Key;import java.security.KeyStore;//import sun.misc.base64Enprer;import org.apache.commons.prec.binary.base64;public class DumpPrivateKey {         static public void main(String[] args)    throws Exception {        if(args.length < 3) {          throw new IllegalArgumentException("expected args: Keystore filename, Keystore password, alias, <key password: default same than keystore");        }        final String keystoreName = args[0];        final String keystorePassword = args[1];        final String alias = args[2];        final String keyPassword = getKeyPassword(args,keystorePassword);        KeyStore ks = KeyStore.getInstance("jks");        ks.load(new FileInputStream(keystoreName), keystorePassword.toCharArray());        Key key = ks.getKey(alias, keyPassword.toCharArray());        //String b64 = new base64Enprer().enpre(key.getEnpred());        String b64 = new String(base64.enprebase64(key.getEnpred(),true));        System.out.println("-----BEGIN PRIVATE KEY-----");        System.out.println(b64);        System.out.println("-----END PRIVATE KEY-----");    }    private static String getKeyPassword(final String[] args, final String keystorePassword)    {       String keyPassword = keystorePassword; // default case       if(args.length == 4) {         keyPassword = args[3];       }       return keyPassword;    }}

您可以这样使用它:

java -classpath .:commons-prec-1.4/commons-prec-1.4.jar DumpPrivateKey $HOME/.keystore changeit tomcat


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573774.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号