我的android项目已经生成了签名但不知道这个签名是什么也不知在哪查看
2个回答
2015-12-09 · 知道合伙人软件行家
关注
展开全部
签名的apk自己无法查看,是安装的时候android系统验证用的。
1.签名的意义
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.签名的步骤
a.创建key
b.使用步骤a中产生的key对apk签名
3.具体操作, 命令行下对apk签名(原理)
创建key,需要用到keytool.exe (位于jdk1.6.0_24\jre\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk1.6.0_24\bin目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入
D:\>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore/*说明:-genkey 产生密钥 -alias demo.keystore 别名 demo.keystore -keyalg RSA 使用RSA算法对签名加密 -validity 40000 有效期限4000天 -keystore demo.keystore */D:\>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore/*说明:-verbose 输出签名的详细信息 -keystore demo.keystore 密钥库位置 -signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore.*/
注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。
1.签名的意义
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.签名的步骤
a.创建key
b.使用步骤a中产生的key对apk签名
3.具体操作, 命令行下对apk签名(原理)
创建key,需要用到keytool.exe (位于jdk1.6.0_24\jre\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk1.6.0_24\bin目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入
D:\>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore/*说明:-genkey 产生密钥 -alias demo.keystore 别名 demo.keystore -keyalg RSA 使用RSA算法对签名加密 -validity 40000 有效期限4000天 -keystore demo.keystore */D:\>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore/*说明:-verbose 输出签名的详细信息 -keystore demo.keystore 密钥库位置 -signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore.*/
注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。
展开全部
一般来说可以是公钥N,因为公钥同样是不可伪造的,公钥N知道的话,那么就可以验证签名的真伪了.
如果给有签名获取工具的就用其来获取.
主要思想如下
private static final String CERT_RSA_NAME = "META-INF/CERT.RSA";
inputJar = new JarFile(new File("abc.apk"), false);
ZipEntry ecetRsaEntry = inputJar.getEntry(CERT_RSA_NAME);
InputStream inputStream = inputJar.getInputStream(ecetRsaEntry);
PKCS7 pkcs7 = new PKCS7(inputStream);
inputStream.close();
X509Certificate publicKey = pkcs7.getCertificates()[0];
SignerInfo signerInfo = pkcs7.getSignerInfos()[0];
byte[] encryptedDigest = signerInfo.getEncryptedDigest();//encryptedDigest为hash摘要结果
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initVerify(publicKey);
boolean b = signature.verify(encryptedDigest);
把encryptedDigest作为签名结果是合理,但是不同的签名工具签名得到摘要是不同的,因为zip包解析时ZipEntry顺序不唯一,摘要结果也就不唯一,但都有效.
如果给有签名获取工具的就用其来获取.
主要思想如下
private static final String CERT_RSA_NAME = "META-INF/CERT.RSA";
inputJar = new JarFile(new File("abc.apk"), false);
ZipEntry ecetRsaEntry = inputJar.getEntry(CERT_RSA_NAME);
InputStream inputStream = inputJar.getInputStream(ecetRsaEntry);
PKCS7 pkcs7 = new PKCS7(inputStream);
inputStream.close();
X509Certificate publicKey = pkcs7.getCertificates()[0];
SignerInfo signerInfo = pkcs7.getSignerInfos()[0];
byte[] encryptedDigest = signerInfo.getEncryptedDigest();//encryptedDigest为hash摘要结果
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initVerify(publicKey);
boolean b = signature.verify(encryptedDigest);
把encryptedDigest作为签名结果是合理,但是不同的签名工具签名得到摘要是不同的,因为zip包解析时ZipEntry顺序不唯一,摘要结果也就不唯一,但都有效.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询