获取Android签名证书的公钥和私钥的简单实例

本文以Android签名JKS格式的证书为例:

package com.test; import java.io.FileInputStream; import java.security.Key; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.Cipher; public class SignTest { public static void main(String[] args) { try { // 用证书的私钥解密 - 该私钥存在生成该证书的密钥库中 FileInputStream fis2 = new FileInputStream("G:\\shanhytest.keystore"); KeyStore ks = KeyStore.getInstance("JKS"); // 加载证书库 char[] kspwd = "shanhytest".toCharArray(); // 证书库密码 char[] keypwd = "shanhytest".toCharArray(); // 证书密码 String alias = "shanhytest";// 别名 ks.load(fis2, kspwd); // 加载证书 PrivateKey privateKey = (PrivateKey) ks.getKey(alias, keypwd); // 获取证书私钥 PublicKey publicKey = ks.getCertificate(alias).getPublicKey();// 获取证书公钥 fis2.close(); System.out.println("privateKey = " + getKeyString(privateKey)); System.out.println("publicKey = " + getKeyString(publicKey)); // 测试加密解密字符串 String srcContent = "今天天气不错。"; // 将字符串使用公钥加密后,再用私钥解密后,验证是否能正常还原。 // 因为非对称加密算法适合对小数据量的数据进行加密和解密,而且性能比较差,所以在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。 byte[] d1 = crypt(publicKey, srcContent.getBytes(), Cipher.ENCRYPT_MODE); byte[] d2 = crypt(privateKey, d1, Cipher.DECRYPT_MODE); System.out.println(new String(d2)); } catch (Exception e) { e.printStackTrace(); } } /** * 将KEY转换为字符串 * * @param key * @return * @author SHANHY */ private static String getKeyString(Key key) { byte[] keyBytes = key.getEncoded(); String s = new String(org.apache.commons.codec.binary.Base64.encodeBase64(keyBytes)); return s; } /** * 加密/解密 * * @param key * 私钥打包成byte[]形式 * @param data * 要解密的数据 * @param opmode * 操作类型(Cipher.DECRYPT_MODE为解密,Cipher.ENCRYPT_MODE为加密) * @return 解密数据 */ public static byte[] crypt(Key key, byte[] data, int opmode) { try { long startTime = System.currentTimeMillis(); Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");//jdk默认标准 // Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");// android默认标准 cipher.init(opmode, key); byte[] result = cipher.doFinal(data); System.out.println((Cipher.DECRYPT_MODE==opmode?"解密":"加密") + "耗时:" + (System.currentTimeMillis() - startTime)); return result; } catch (Exception e) { e.printStackTrace(); } return null; } }

以上这篇获取Android签名证书的公钥和私钥的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

时间: 2024-09-27 13:15:10

获取Android签名证书的公钥和私钥的简单实例的相关文章

获取Android签名证书的公钥和私钥的简单实例_Android

本文以Android签名JKS格式的证书为例: package com.test; import java.io.FileInputStream; import java.security.Key; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.Cipher; public class SignTest { pu

获取Android签名证书的公钥和私钥

本文以Android签名JKS格式的证书为例: package com.test; import java.io.FileInputStream; import java.security.Key; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.Cipher; public class SignTest { pu

修改Android签名证书keystore的密码、别名alias以及别名密码_Android

Eclipse ADT的Custom debug keystore自定义调试证书的时候,Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和keystore的指纹hash来识别的(百度地图SDK.又或是微信sdk.新浪微博的sdk),这样如果使用默认自动生成的debug keystore的话就会给开发调试工作带来一些麻烦.因为在生成这些开放平台需要带签名的apk生成的签名信息,再去申请到最后的秘钥.这时可以通过修改正式的release keystore,生

修改Android签名证书keystore的密码、别名alias以及别名密码

Eclipse ADT的Custom debug keystore自定义调试证书的时候,Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和keystore的指纹hash来识别的(百度地图SDK.又或是微信sdk.新浪微博的sdk),这样如果使用默认自动生成的debug keystore的话就会给开发调试工作带来一些麻烦.因为在生成这些开放平台需要带签名的apk生成的签名信息,再去申请到最后的秘钥.这时可以通过修改正式的release keystore,生

Android 中自定义ContentProvider与ContentObserver的使用简单实例

Android 中自定义ContentProvider与ContentObserver的使用简单实例 示例说明: 该示例中一共包含两个工程.其中一个工程完成了自定义ContentProvider,另外一个工程用于测试该自定义ContentProvider且在该工程中使用了ContentObserver监听自定义ContentProvider的数据变化 以下代码为工程TestContentProvider ContentProviderTest如下: package cn.testcontentp

javascript实现获取指定精度的上传文件的大小简单实例_javascript技巧

js实现获取指定精度的上传文件的大小,主要采用html和JavaScript,用浏览器运行下述代码,按照操作:选择文件->获得文件大小的顺序,即可. 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获得文件大小</title> </head> <body> <f

js中获取 table节点各tr及td的内容简单实例_jquery

<table id="tb1" width="200" border="1" cellpadding="4" cellspacing="0"> <tr> <td height="25">第一行</td> </tr> <tr> <td height="25">第二行</td>

我的Android进阶之旅------&amp;gt;修改Android签名证书keystore的密码、别名alias以及别名密码

转载于:http://blog.k-res.net/archives/1229.html  和 http://blog.k-res.net/archives/1671.html ADT允许自定义调试用证书,在Window->Preferences->Android->Build->Custom debug keystore这里,试了一下选择正式证书后提示:"Keystore was tampered with, or password was incorrect"

[置顶] 我的Android进阶之旅------&amp;gt;Android中制作和查看自定义的Debug版本Android签名证书

      Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和的证书指纹SHA1码来识别的,如百度地图SDK.这样如果使用默认自动生成的debug的话就会给开发调试工作带来一些麻烦.这时可以通过修改正式的release keystore,生成一份"遵守规矩"的临时自定义调试证书给开发时用,就方便多了,具体方法如下.        首先要知道默认的debug证书位置在哪里,打开Eclipse-->Windows-->Preferenc