keystore是个嘛东西

本文介绍如何使用keytool生成和管理签名证书,包括创建keystore文件、检查keystore内容及导出证书等步骤,并提供了一段Java代码用于获取应用程序的SHA1指纹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不管是QQ,还是微信,还是支付,涉及到第三方的都的用这个玩意,有时候找不对很坑的

首先我们要区分jks, app,keystore(新建keystoer的文件new就可以了)再进行下一步操作

Eclipse的获取方式

 

Studio的获取方式

 

使用keytool自代的jdk获取方式

1.在android文件夹中

 

 击入:调试版本使用 debug.keystore,命令为:keytool -list -v -keystore debug.keystore。 发布版本使用 apk 对应的 keystore,命令为:keytool -list -v -keystore apk 的  keystore 。

即可看到

感谢高德文档

 

在我的实践中可没这么巧,上面的方法不管用,我屡试不爽

1.在老兄的帮助下

   在cmd下,进入C:\Users\Administrator\.android目录执行命令如下:

          keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000

           输入密码,用户等信息确认后便可生成一个debug.keystore

   

在jdk中生成keystore

  击入:

  keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore   

  提示 ??

 

无意中用了这个方法,不错挺给力

 1.创建keystore文件
       keytool -genkey -alias dotuian -keystore dotuian.keystore -keyalg RSA
       生成一个名为 dotuian.keystore 的文件
   2 检查一个keystore:
    keytool -list -v -keystore dotuian.keystore
    Enter keystore password:your password(输入密码)
    3输出keystore到一个文件:testkey:
   keytool -export -alias dotuian -keystore dotuian.keystore -rfc -file dotuian.cer
   Enter keystore password:your password(输入密码)

 

这个看着挺老道的

1.Build -> Generate Signed APK ->Next...生成Apk, 然后在 .Android目录中 keytool -list -v -keystore debug.keystore,就会生成debug.keystore, keystore和jks是一样的原理,相当一证书

 

When using Code Completion, you can accept the currently highlighted selection in the popup list with Tab key.在写自定义的电影选票时出来这个错,很棘手?

 

写代码也好,做项目也好,思路真的很重要,静下心来好好想想,应做什么,不做做什么,what,why how

获取jks,apk.keystore

1.他们都是有build中生成的,只是后缀不一样,构建出来的文件不一样

2.获取sha1,要用keystore生成

签名生成命令 keytool -list -v -keystore keystore.jks ( keystore或者jks的地址)当然了可以代码生成

 

public class KeyTool {
    //这个是获取SHA1的方法
    public static String getCertificateSHA1Fingerprint(Context context) {
        //获取包管理器
        PackageManager pm = context.getPackageManager();
        //获取当前要获取SHA1值的包名,也可以用其他的包名,但需要注意,
        //在用其他包名的前提是,此方法传递的参数Context应该是对应包的上下文。
        String packageName = context.getPackageName();
        //返回包括在包中的签名信息
        int flags = PackageManager.GET_SIGNATURES;
        PackageInfo packageInfo = null;
        try {
            //获得包的所有内容信息类
            packageInfo = pm.getPackageInfo(packageName, flags);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        //签名信息
        Signature[] signatures = packageInfo.signatures;
        byte[] cert = signatures[0].toByteArray();
        //将签名转换为字节数组流
        InputStream input = new ByteArrayInputStream(cert);
        //证书工厂类,这个类实现了出厂合格证算法的功能
        CertificateFactory cf = null;
        try {
            cf = CertificateFactory.getInstance("X509");
        } catch (Exception e) {
            e.printStackTrace();
        }
        //X509证书,X.509是一种非常通用的证书格式
        X509Certificate c = null;
        try {
            c = (X509Certificate) cf.generateCertificate(input);
        } catch (Exception e) {
            e.printStackTrace();
        }
        String hexString = null;
        try {
            //加密算法的类,这里的参数可以使MD4,MD5,SHA1,SHA256等加密算法
            MessageDigest md = MessageDigest.getInstance("SHA1");
            //获得公钥
            byte[] publicKey = md.digest(c.getEncoded());
            //字节到十六进制的格式转换
            hexString = byte2HexFormatted(publicKey);
        } catch (NoSuchAlgorithmException e1) {
            e1.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return hexString;
    }
    //这里是将获取到得编码进行16进制转换
    private static String byte2HexFormatted(byte[] arr) {
        StringBuilder str = new StringBuilder(arr.length * 2);
        for (int i = 0; i < arr.length; i++) {
            String h = Integer.toHexString(arr[i]);
            int l = h.length();
            if (l == 1)
                h = "0" + h;
            if (l > 2)
                h = h.substring(l - 2, l);
            str.append(h.toUpperCase());
            if (i < (arr.length - 1))
                str.append(':');
        }
        return str.toString();
    }
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值