Advertisement

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

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本文基于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

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Android 加解密方法(推荐)
    优质
    本文介绍了如何在Android系统中获取应用签名的公钥,并提供了公钥和私钥进行数据加密与解密的方法。适用于需要增强安全性的开发者参考使用。 在Android开发过程中,确保数据的安全传输以及应用身份的验证至关重要,这通常涉及到公钥与私钥的应用。本段落将详细介绍如何在Android环境中获取应用程序签名中的公钥,并阐述使用公钥及私钥进行加密解密的基本步骤。 首先需要理解的是基本的非对称加密原理:即利用一对密钥(一个公开,用于数据加密;另一个保密,用于数据解密)来实现安全的数据传输。其中,在Android应用开发中,通过获取应用程序签名信息可以提取到公钥。 以下是一套简单流程以帮助开发者在Android环境中获取并处理应用的签名公钥: 1. 利用`PackageManager.getPackageInfo()`方法,并传入当前应用包名及标志`GET_SIGNATURES`来获得包含所有签名信息的`PackageInfo`对象。 2. 通过访问该对象中的`signatures[0]`,可以获取到应用程序的第一个(通常也是唯一的)签名数据。 3. 接着将上述签名转换为字节流,并利用Java内置类库如CertificateFactory生成X.509证书格式的对象。 4. 然后从所创建的证书对象中提取出公钥信息。这个过程涉及到获取`PublicKey.toString()`返回值中的特定字符串部分,例如模数和指数等关键参数。 5. 最终通过适当处理(比如去除多余空白字符)上述步骤得到的数据即可获得我们需要使用的公钥。 下面提供了一段示例代码展示如何实现这些操作: ```java public class GetPublicKey { public static String getSignInfo(Context mContext) { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( GetAppInfo.getPackageName(mContext), PackageManager.GET_SIGNATURES); Signature sign = packageInfo.signatures[0]; String signcode = parseSignature(sign.toByteArray()); return signcode.toLowerCase(); } private static String parseSignature(byte[] signature) { try { CertificateFactory certFactory = CertificateFactory.getInstance(X.509); X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(signature)); PublicKey publicKey = cert.getPublicKey(); String pubKeyStr = publicKey.toString(); Pattern pp = Pattern.compile(s*|t|r|n); Matcher mm = pp.matcher(pubKeyStr); int modulusStart = mm.replaceAll().indexOf(modulus) + 8; int exponentStart = mm.replaceAll().indexOf(publicexponent); return mm.replaceAll().substring(modulusStart, exponentStart); } catch (Exception e) { Log.e(Constants.TAG, e.getMessage(), e); } return ; } } ``` 一旦拥有公钥,下一步就是利用它来进行数据加密,并使用对应的私钥进行解密操作。在Java和Android环境中,这通常通过`java.security.Cipher`类来完成: ```java import java.security.*; public class RSAExample { public static void main(String[] args) throws Exception { KeyPairGenerator keyGen = KeyPairGenerator.getInstance(RSA); keyGen.initialize(2048); KeyPair keyPair = keyGen.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); byte[] message = Hello, World!.getBytes(UTF-8); Cipher cipher = Cipher.getInstance(RSA + ECBCPKCS1Padding); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] encrypted = cipher.doFinal(message); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decrypted = cipher.doFinal(encrypted); System.out.println(Original: + new String(message,UTF-8)); System.out.println(Decrypted: + new String(decrypted,UTF-8)); } } ``` 以上代码展示了如何生成一对2048位的RSA密钥,使用公钥加密消息,并用私钥解密。在实际应用中应当注意妥善保管好私钥以确保数据的安全性。 总结来说,在Android环境中获取签名公钥需要利用到`PackageManager`, `CertificateFactory`以及`PublicKey`等核心类库;而进行基于公钥与私钥的加解密操作则主要依赖于Java安全包中的相关组件。这些技术对于保障通信安全性、防止篡改及验证应用身份具有关键作用,因此在实际开发中应予以充分重视和正确实施。
  • 、数字及数字详解
    优质
    本文详细解释了公钥加密技术中的核心概念,包括公钥与私钥的作用机制、数字签名验证过程以及数字证书的工作原理和应用场景。 公钥私钥数字签名及数字证书详解: 在信息安全领域中,了解公钥、私钥以及它们如何用于生成数字签名至关重要。此外,理解数字证书的作用及其与这些密钥的关系也是必要的。 首先介绍的是公钥加密技术的基本概念:每个用户都有一个独一无二的公共钥匙(即“公钥”)和与其配对的私人钥匙(即“私钥”)。这两把键一起构成了该用户的密钥对。当信息通过网络发送给接收者时,发件人可以使用收件人的公开密钥对其内容进行加密;只有持有对应私有密钥的人才能解码并阅读原始消息。 数字签名则是利用个人的私钥来验证文件或文档的真实性和完整性的一种方法。当创建一个带有签署者的唯一标识(如电子邮件地址)的消息时,发送者会用他们的私人钥匙生成一段特定数据作为“指纹”。接收方可以使用发件人的公开密钥检查这个“指纹”,以确认信息未被篡改且确实来自声称的来源。 而数字证书则是由可信第三方机构颁发给个人或组织的一个电子文件。它包含了持有者的公钥、身份详情及其他相关信息,并经过权威认证中心(CA)签名证明其有效性。这使得接收者能够验证发送方的身份,确保通信的安全性和可靠性。 综上所述,掌握这些概念有助于更好地理解如何保护在线交易和个人数据免受未经授权的访问和篡改。
  • Android现方法
    优质
    本文介绍了在Android开发中如何获取应用签名和公钥的方法,包括使用命令行工具及Java代码实现过程,帮助开发者验证身份和保障安全。 在Android开发过程中,获取应用程序的签名和公钥是非常重要的安全操作。这有助于验证应用的身份、确保数据的安全交换以及防止恶意篡改。本段落将详细解释如何在Android中实现这一功能。 首先需要理解数字签名中的私钥与公钥概念:开发者使用自己的私钥对APK进行签名,在这个过程中包含了开发者的身份信息,从而可以防止他人修改该应用程序;而公钥则用于验证这些已签发的应用程序的完整性,确保其未被第三方篡改。当用户尝试在Android设备上安装应用时,系统会检查应用包中的数字签名是否匹配已知开发者的信息。 以下是获取签名和公钥的具体步骤: 1. **获取签名**: 使用`PackageManager`类可以检索到应用程序的签名信息。以下是一个Java代码示例展示如何通过指定的应用程序包名(例如com.test.test)来查找其对应的签名字节数组: ```java private byte[] getSign(Context context) { PackageManager pm = context.getPackageManager(); List apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES); Iterator iter = apps.iterator(); while (iter.hasNext()) { PackageInfo info = iter.next(); String packageName = info.packageName; if (packageName.equals(com.test.test)) { return info.signatures[0].toByteArray(); // 根据包名返回签名信息 } } return null; } ``` 这段代码遍历设备上所有已安装的应用,并通过`GET_SIGNATURES`标志获取每个应用的签名。当找到指定的应用程序时,将返回其签名字节数组。 2. **提取公钥**: 一旦获得了应用程序的签名信息(即字节数组),接下来就可以利用Java安全库中的相关类来从该数字证书中提取出对应的公钥部分: ```java public static String getPublicKey(byte[] signature) { try { CertificateFactory certFactory = CertificateFactory.getInstance(X.509); X509Certificate certificate = (X509Certificate)certFactory.generateCertificate(new ByteArrayInputStream(signature)); // 提取并返回公钥的模数部分 String publicKeyString = certificate.getPublicKey().toString(); int modulusStartIndex = publicKeyString.indexOf(modulus: ) + 9; int nEndIndex = publicKeyString.indexOf(n, modulusStartIndex); return publicKeyString.substring(modulusStartIndex, nEndIndex); } catch (CertificateException e) { e.printStackTrace(); } return null; } ``` 这里使用了`CertificateFactory.getInstance(X.509)`来指定我们要处理的是X.509格式的数字证书,然后通过传入签名字节流构建出对应的证书对象。接着从该证书中提取公钥信息,并返回其模数部分。 总结起来,在Android中获取应用签名和公钥主要包含以下步骤: 1. 使用`PackageManager`检索到指定应用程序包名的应用程序并获得其签名字节数组。 2. 利用Java安全库中的相关类从字节流中生成X509数字证书对象,并从中提取出公钥信息。 这些操作对于实现应用间的安全通信、验证应用的身份或检测恶意篡改等场景非常有用。在实际开发过程中,可能需要根据具体需求调整上述代码以适应不同的情况(例如处理多个签名的情况)。
  • Android现方法
    优质
    本文介绍了在Android开发中如何获取应用的数字证书签名以及公钥的方法,帮助开发者验证应用程序的身份。 本段落实例讲述了在Android中实现获取签名及公钥的方法,并将其分享给大家参考。 1. Java代码如下: ```java private byte[] getSign(Context context) { PackageManager pm = context.getPackageManager(); List apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES); Iterator iter = apps.iterator(); while (iter.hasNext()) { PackageInfo pi = iter.next(); if (pi.packageName.equals(context.getPackageName())) { return pi.signatures[0].toByteArray(); } } return null; } ``` 请注意,这段代码用于获取指定应用包的签名信息。首先通过`PackageManager`对象获得所有已安装的应用列表,并从中筛选出当前应用的信息,然后从该应用的PackageInfo中提取第一个(也是通常唯一的一个)签名并返回其字节数组形式。 注意:上述实现仅展示了如何获取签名的一部分逻辑,完整的代码可能还需要添加适当的异常处理和优化。
  • RSA工具类(包含加密、解密、
    优质
    本工具类提供基于RSA算法的安全服务,涵盖公钥加密与私钥解密功能,确保数据传输安全;同时支持私钥签名及公钥验证机制,增强信息的完整性和不可否认性。 RSA是一种常用的非对称加密算法。这次封装的Utils类实现了公钥加密、私钥解密、私钥签名以及公钥验签四种常用功能。
  • SM2加密解密
    优质
    本项目详细介绍了SM2算法在数字签名与验证、公钥私钥加密解密过程中的应用,并提供相应代码实现。 这是我基于GMP大数运算库,并借鉴了lib-ecc中的代码实现的C语言SM2接口。该接口包含了SM3算法的实现,仅实现了签名验证、公钥加密及私钥解密功能。已对SM2中的数据进行了验证,但未具体应用于工程中。整个代码是在Linux环境下使用Eclipse开发的,并没有自己编写Makefile文件;需要调试的话可以自行编写或在专业版Eclipse中安装相关插件。该代码仅供借鉴和交流之用。 由于个人水平有限,可能存在不足之处,希望大家能够批评指正。已知的问题包括私钥解密时未验证无穷远点(本人不会)。
  • 得RSA
    优质
    本文介绍了如何获取用于加密通信的RSA算法中的公钥和私钥的方法与步骤,包括在线工具使用及编程实现。 获取RSA公钥和私钥的方法有很多种。可以通过编程语言的库函数生成一对密钥对,例如在Java或Python中使用相应的加密库来实现。也可以在线寻找可信的服务或者工具帮助生成密钥对,但需要注意选择安全可靠的来源以保证密钥的安全性。
  • OpenSSL 中 SM2 密解析以
    优质
    本文介绍了在 OpenSSL 库中使用SM2算法解析密钥对的方法,详细讲解了如何从SM2密钥中提取出公钥与私钥,并提供了相应的代码示例。 在 OpenSSL 中,可以将 PEM 格式的 SM2 密钥解析为 EC_KEY 格式,并从中提取出公钥和私钥。
  • 过期代码数字_强制工具_数字
    优质
    本工具专为处理过期代码签名数字证书及私钥而设计,提供有效的强制签名解决方案。适用于需要管理和更新数字签名与证书的企业和个人用户。 可以强制签名已过期的数字签名,这是成品exe文件。如果经过查杀确认无病毒,则该操作是可行的。