应用签名_应用签名验证 - CSDN
精华内容
参与话题
  • Android应用签名

    千次阅读 2014-02-13 23:08:32
    为了要签名?  开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。  由于开发商可能通过使用相同的Package Name来混淆替换已经安装的...

    为了要签名?

        开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。

        由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相当名字,但是签名不同的包不被替换。

        APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。

        这样签名其实也是开发者的身份标识。交易中抵赖等事情发生时,签名可以防止抵赖的发生。


    1、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!
    2、应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块  
    3、代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。

     

    签名的注意事项

    • 所有的Android应用都必须有数字签名,没有不存在数字签名的应用,包括模拟器上运行的。Android系统不会安装没有数字证书的应用。
    • 签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。
    • 模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。如下图所示,Eclipse菜单的Window -> Preferences -> Android –> Build 下显示的是我们默认的调试用的签名数字证书。

    image

    • 正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。
    • 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
    • 签名后需使用zipalign优化程序。
    • Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。

    签名的方法

    方法一、使用Eclipse工具

    此方法适用于Android1.5及以上版本。

    步骤一:打开Eclipse->选择你要签名的项目->右击->android tools->Export signed Application package

    image

    步骤二,在出现的窗口确认是不是这个项目要签名,然后选择下一步:

    image

    步骤三:在Export Android Application 这一步,如果我们之前已有有了 keystore, 选择我们之前已有的,否则我们新建一个。

    如下,选择需要保存这个证书文件的目录,以及这个证书文件的一个密码。

    image

    步骤四,点击下一步后,我们需要填写keystore的基本信息,如,别名,密码,有效期,姓名,组织,组织名称,所在城市,所在省份,国家等,点击Next

    image

    步骤五、选择被签名后的APK保存位置。点击finish。注意是选择最终将产生的文件。

    image

    之后我们在刚才选择的目录下就可以看到生成的签名后的APK文件。

    方法二:使用命令行方式签名。

    这种方式比起前面要复杂很多了,但是却对我们理解APK文件有很多帮助。这里我们是使用Keytool和Jarsigner给程序签名。

    keytool 是个密钥和证书管理工具。jarsigner 工具利用密钥仓库中的信息来产生或校验 Java 存档 (JAR) 文件的数字签名 (JAR 文件将类文件、图象、声音和/或其它数字化数据打包在一个文件中)。

    这两个工具都是JDK自带的,所以你当前需要先确保JDK安装正确。并且环境变量设置正确,以便可以以命令行的方式进行处理。

     

    步骤一:用 KeyTool 产生证书文件

    下面是我随便生成的一个证书文件:

    E:\Projects\cybercare.cn\trunk\android\ks2>keytool -genkey -keystore ks2.keystor 
    e -keyalg RSA -validity 10000 -alias ks2.keystore 
    输入keystore密码: 
    您的名字与姓氏是什么? 
      [Unknown]:  www.cybercare.cn 
    您的组织单位名称是什么? 
      [Unknown]:  Cybercare 
    您的组织名称是什么? 
      [Unknown]:  津驰速信 
    您所在的城市或区域名称是什么? 
      [Unknown]:  北京 
    您所在的州或省份名称是什么? 
      [Unknown]:  北京 
    该单位的两字母国家代码是什么 
      [Unknown]:  CN 
    CN=www.cybercare.cn, OU=Cybercare, O=津驰速信, L=北京, ST=北京, C=CN 正确吗? 
      [否]:  y

    输入<ks2.keystore>的主密码 
            (如果和 keystore 密码相同,按回车): 
    再次输入新密码:

    E:\Projects\cybercare.cn\trunk\android\ks2>

    命令参数说明:

    -genkey    产生证书文件 
    -keystore  指定密钥库的.keystore文件中 

    -keyalg     指定密钥的算法

    -validity    为证书有效天数,这里我们写的是10000天。 
    -alias       产生别名 

    在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,切忌需要记下来后面还要用,

    注意:

    1、CN(Common Name - 名字与姓氏):其实这个“名字与姓氏”应该是域名,比如说localhost或是blog.devep.net之类的。输成了姓名,和真正运行的时候域名不符,会出问题。浏览器访问时,弹出一个对话框,提示“安全证书上的名称无效,或者与站点名称不匹配”,用户选择继续还是可以浏览网页。但是用http client写程序访问的时候,会抛出类似于“javax.servlet.ServletException: HTTPS hostname wrong: should be ”的异常。

    2、在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同。否则下一步签名时会出现错误:jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。

     

     

    KeyTool的更多参数说明可以看这篇文章:

    http://www.cnblogs.com/kungfupanda/archive/2010/09/01/1815047.html

     

    步骤二:导出未签名的APK文件

     

    方法一:使用Eclipse

    打开Eclipse->选择你要导出的项目->右击->android tools->Export Unsigned Application package

    image

    然后在选择保存文件目录和文件名对话框中输入你想保存的地址,确认后导出后提示信息类似如下:

    image

    方法二:

    使用Eclipse,在Package Explorer中选择Androidmanifest.xml文件,找到overview项中,单击Export the unsigned apk,如图

    image

    注意:

    http://www.android123.com.cn/kaifafaq/175.html 提供的方法二:

    直接进入工程文件夹的bin目录,比如我们的为C:\Documents and Settings\Administrator\workspace\android123\bin\android123.apk,直接复制出来就是未签名的APK文件。

    这个方法并不可取,这个方法取出来的是加了Debug签名的APK文件,而不是未签名的APK文件。

     

     

    步骤三,使用产生证书文件签名

    下面是我签名我一个之前写的演示程序的执行效果:

    E:\Projects\cybercare.cn\trunk\android\ks2>jarsigner -verbose -keystore ks2.keystore -signedjar GasBuddy_signed_00.apk GasBuddy002.apk ks2.keystore 
    输入密钥库的口令短语: 
    输入 ks2.keystore 的密钥口令: 
       正在添加: META-INF/MANIFEST.MF 
       正在添加: META-INF/KS2_KEYS.SF 
       正在添加: META-INF/KS2_KEYS.RSA 
      正在签名: res/layout/active.xml 
      正在签名: res/layout/businessmeninfo_activitylayout.xml 
      正在签名: res/layout/businessmeninfo_commentinfo_layout.xml 
      正在签名: res/layout/businessmeninfo_commentlist_layout.xml 
      正在签名: res/layout/businessmeninfo_information_layout.xml 
      正在签名: res/layout/businessmeninfo_pointcardinfo_layout.xml 
      正在签名: res/layout/businessmeninfo_pointcardlist_layout.xml 
      正在签名: res/layout/commen_publish.xml 
      正在签名: res/layout/discount_gasstation_foot_layout.xml 
      正在签名: res/layout/discount_gasstation_head_layout.xml 
      正在签名: res/layout/discount_gasstation_layout.xml 
      正在签名: res/layout/discount_gasstation_list_activitylayout.xml 
      正在签名: res/layout/discount_gasstation_title_layout.xml 
      正在签名: res/layout/login.xml 
      正在签名: res/layout/main.xml 
      正在签名: res/layout/menu_activitylayout.xml 
      正在签名: res/layout/my_point_gasstation.xml 
      正在签名: res/layout/my_point_gasstation_view.xml 
      正在签名: res/layout/nearby_gasstation.xml 
      正在签名: res/layout/overlay_pop.xml 
      正在签名: res/layout/register.xml 
      正在签名: res/layout/splash_layout.xml 
      正在签名: AndroidManifest.xml 
      正在签名: resources.arsc 
      正在签名: res/drawable-hdpi/bubble_background.9.png 
      正在签名: res/drawable-hdpi/icon.png 
      正在签名: res/drawable-hdpi/marker.png 
      正在签名: res/drawable-hdpi/u25.png 
      正在签名: res/drawable-hdpi/u30.png 
      正在签名: res/drawable-ldpi/icon.png 
      正在签名: res/drawable-mdpi/icon.png 
      正在签名: classes.dex

    E:\Projects\cybercare.cn\trunk\android\ks2>

     

    有关 jarsigner 参数的详细信息可以参看 
    http://www.android123.com.cn/androidkaifa/173.html

     

    解决对android APK 项目进行签名过程中遇到的问题 
    http://zhangkun716717-126-com.iteye.com/blog/774382

    参考资料

    Android签名用keytool和jarsigner制作apk文件 
    http://www.android123.com.cn/androidkaifa/173.html

    如何导出一个未签名的APK文件? 
    http://www.android123.com.cn/kaifafaq/175.html

    无法对jar进行签名,Android jarsigner问题 
    http://www.android123.com.cn/kaifafaq/183.html

    有关Android签名问题总结 
    http://www.android123.com.cn/androidkaifa/272.html

    Android 签名详解 
    http://yangguangfu.iteye.com/blog/723182

    android签名apk批处理文件 
    http://phenix.blogbus.com/logs/60336413.html

    android签名与release 
    http://my.chinaunix.net/space.php?uid=20665441&do=blog&id=377220

    展开全文
  • 应用签名-签名原理

    2020-02-12 15:42:26
    HASH加密 将任意大小的数据通过散列算法变换成固定长度的字符,通常为32位的固定字符,又称hash值。...支付宝,微信等支付过程需要的签名也是这一原理实现。数字签名流程如下: iOS签名 为避免垃圾...

    HASH加密

    将任意大小的数据通过散列算法变换成固定长度的字符,通常为32位的固定字符,又称hash值。特点:算法公开、不可逆、结果定长。常见的MD5加密。

    非对称加密

    公钥加密,私钥解密,加密过程需要经历很多计算,因此效率很低。明文->公钥->密文 密文->私钥->明文
    支付宝,微信等支付过程需要的签名也是这一原理实现。数字签名流程如下:
    在这里插入图片描述

    iOS签名

    为避免垃圾应用的安装,破坏应用生态,苹果采用更高级的加密,对应用进行双层代码签名。
    1、首先在Mac端生成一对公私钥(Xcode自动生成)为公钥M私钥M
    2、苹果有一对固定的公私钥,私钥在苹果后台,公钥在每个iOS系统中,称公钥A,私钥A
    3、把公钥M和开发者信息,上传到苹果后台(CSR文件),用苹果后台里的私钥A去签名公钥M,得到一个含有公钥M签名的数据包,该包即为证书
    4、iPhone中的公钥A可解密用苹果服务器私钥A加密的公钥M,通过公钥M可以对加密的APP进行解密。

    描述文件:包含证书、APPID、设备id、打包后用来证明我们的程序的安全性和合法性。如常用的测试包,需要添加测试人员的udid,苹果需要对其验证后,相应的设备才能安装。签名原理如图:
    在这里插入图片描述

    《应用签名-手动签名》

    展开全文
  • 微信开放平台Android应用签名的本质及如何获取

    万次阅读 多人点赞 2017-03-10 19:30:01
    在微信开放平台创建移动应用时上图大家都遇到过,这里的应用签名是什么呢? 这里介绍说可以通过签名生成工具在已安装当前应用的手机中获取,(待会获取测试一下)我们先搞明白它是什么,这里提到了该应用签名由开发者签名...


    在微信开放平台创建移动应用时上图大家都遇到过,这里的应用签名是什么呢?

    这里介绍说可以通过签名生成工具在已安装当前应用的手机中获取,(待会获取测试一下)我们先搞明白它是什么,这里提到了该应用签名由开发者签名该应用的keystore文件决定。

    接下来我们便来探究一下这个应用签名是什么

    思路:

    1.创建一个keystore文件

    2.创建一个Android应用

    3.使用keystore文件签名该应用得到签名apk

    4.使用签名生成工具查看该应用的签名

    我们下面开始一步步执行

    1.生成keystore文件

    在自己电脑jdk的安装目录bin文件夹内打开dos命令行(cmd命令打开cd到bin目录也可以),输入如下命令:

    keytool -genkey -alias qj_test -keyalg RSA -validity 10000 -keystore qj_test.keystore
    具体操作如下图:

    这时我们发现在我们的bin文件夹内多了一个qj_test.keystore文件,它就是我们生成的keystore文件


    接下来我们在命令行输入如下命令:

    keytool -list -v -keystore qj_test.keystore
    输入密钥库口令:123456之后得到详细的keystore输出信息如下:

    这里大家明显看到我把MD5值给框起来了,跟它有关系吗?想知道答案继续往下看吧…

    2.创建一个简单的android项目

    项目的包名为:com.qj.keystoretest ,包名符合规范可以随便命名,因为后面会用到,故在此处标出(如何创建项目略)

    3.使用keystore文件签名该应用得到签名apk

    我们的android应用已经创建好了,现在如何使用我们的keystore文件签名我们的应用呢






    app-release.apk便是我们使用自己生成的keystore文件签名生成的apk文件

    先把该apk装到手机中,就剩最后一步啦!

    4.使用签名生成工具查看该应用的签名

    签名生成工具下载(微信开发平台)

    签名生成工具下载(新浪微博开放平台)

    任意下载一个(是一个apk文件)安装手机后运行:



    很显然两个工具生成的签名是相同的,因为签名是由我们的keystore文件决定的,从新浪签名获取工具的名字其实也不难发现,签名应该和MD5有关

    签名生成工具生成的签名:add1944573e750774d84c04148c720a0

    keystore文件中的MD5值:AD:D1:94:45:73:E7:50:77:4D:84:C0:41:48:C7:20:A0

    对比发现:MD5值去掉两两之间的 " : " ,并将大写改为小写之后,奇迹出现了! 你会发现它和签名生成工具生成的签名一模一样。

    总结:微信开放平台Android应用签名的本质便是我们签名文件keystore的MD5值


    相关知识点:

    我们创建自己的keystore,利用keystore生成签名apk文中已经介绍了,如果想要在每次运行调试应用的时候也用该keystore文件生成apk,

    请参考:Android studio 如何指定使用自己生成的keystore调试



    展开全文
  • android应用签名

    2017-07-27 16:24:47
    Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行时到手机上时,是AS会自动用默认的密钥和证书来进行签名;但是我们实际发布编译时,则不会自动签名,这...

    1.什么是签名,有什么用:

    Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行时到手机上时,是AS会自动用默认的密钥和证书来进行签名;但是我们实际发布编译时,则不会自动签名,这个时候我们就需要进行手动签名了! 为我们的APK签名有以下好处:

    • 1.应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!
    • 2.应用程序模块化: Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。
    • 3.代码或者数据共享: Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。 不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。 ————上述内容摘自:android 为什么需要签名

    2.Android Studio如何打包签名:

    好的,因为学习本课程的都是初学者,多渠道打包的内容以后再进行讲解!本节只讲最简单的打包签名 对了,1中说的调试时默认生成的apk在:app/build/outputs/apk目录下! 和Eclipse并不相同,Eclipse是在bin目录下生成的!

    好的,打开我们的AS上的Hello World项目,点击菜单:

    Build -> Generate Signed APK...

    ②弹出窗口,如果没有key,就创建一个,有的话就选择存在的Key

    ③没有,我们新建一个,可根据自己需要填写相关项:

    这里指明一点的是jks的文件如何生成:

    cmd 命令 C:\Program Files\Java\jre1.8.0_111\bin>keytool -genkeypair -alias shy_debug.jks
    -keyalg RSA -validity 7 -keystore shy_debug.jks

    ④好的,点击OK后,可以看到我们密码的信息,可能需要我们填入密码了,填写下:

    ⑤点击Next:

    ⑥点击Finish稍等一会儿会出现下述提示,说明应用已经打包签名成功了:

    ⑦可以看到打包后的APK已经安详地躺在我们的app目录下了:

    ⑧到第七步就已经打包签名完成了,如果你要验证是否签名,只需要输入下述cmd指令


    本节小结

    打包Android APK的方法还有很多,命令行,或者Gradle,ANT,MAVEN等等,方法有很多,本节讲解最简单的通过图形化界面打包签名的方式!好了,本节就到这里,最简单的打包签名方法get了没?

    展开全文
  • 提取应用签名和包名

    千次阅读 2018-06-30 17:48:43
    欢迎Follow我的GitHub,... 应用签名(printcert)是公开的, 只要下载到Apk包, 就可以公开提取. 签名中包含MD5, SHA1, SHA256. 应用唯一性就是表现为签名+包名, 就像人的指纹一样重要, 是确定应用属性的重要信息, 也是应用
  • 获取 app应用签名

    千次阅读 2019-01-10 15:53:45
    第一种方式,本地获取 切换到本机 .Android文件夹 cd C:\Users\ASUN-DEV3\.android 获取 keytool -list -v -keystore debug.keystore md5:.......... sha1:........... ...第二种方式,使用微信工具获取 ...
  • Android应用程序签名相关的理论知识包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名?  如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都...
  • 关于微信,获取应用签名

    千次阅读 2019-03-25 08:02:37
    微信分享有时候,在申请的时候,需要填写它的签名,那签名如何获取呢? 用于对当前应用进行二次身份校验,开发者可以...应用签名由开发者签名该应用的keystore文件决定。 解决方法: 在网站: https://open.wei...
  • 解决Android应用签名和系统不一致的问题

    万次阅读 热门讨论 2016-11-07 21:39:25
    今天碰到一个签名的问题,我负责的应用安装时,会报错:安装命令: adb install -r ApeFolio.apk报错信息: Failed to install ApeFolio.apk: Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: Package couldn'...
  • 查看Android应用签名信息

    万次阅读 2014-12-03 17:58:58
    本文档介绍在Android下如何查看自己的应用签名及三方APK或系统APK签名信息,包含其中的MD5、SHA1、SHA256值和签名算法等信息。 1、查看自己的应用签名 可以通过两种方式查看 (1) 通过Eclipse查看默认的...
  • 当我们在Android的开发过程中可能会因为一些不适当的操作导致安装应用时显示 应用签名不一致,该应用可能被篡改.的问题,会导致推向市场后无法正常更新,屏幕同时出现两个APP一样的情况.针对这个问题:找到你应用的签名...
  • 1.使用已经存在的签名到处android应用程序的apk 2.使用压缩软件打开apk,进入META-INF目录下,删除应用程序的3个签名文件 3.到android系统目录build/target/product/security/拷贝系统签名文件:platform.x509.pem...
  • 先确认是否手机中已经有同样包名,不同签名应用,如果有,先卸载。 重新安装还有这个问题,说明是包的签名有问题,需要重新签名 重新签名的包确保是没有签名过的,如果已经签名过,删掉apk中META-INF目录 重新...
  • 打开签名文件夹 输入cmd   keytool -v -list -keystore ******.jks 查看签名的信息     这个相关帮助: 可以看看       查看MD5 签名信息 是否一致  必须要跟要一致 安装就会报错 ...
  • 有些时候我们单独编译的一些系统apk或者需要匹配系统(平台)签名的apk或者一般经过反编译后再打包的apk文件,在我们进行adb install时会提示没有签名
  • 微信平台开发应用签名

    万次阅读 热门讨论 2013-05-31 16:56:27
    在审核之前,需要填写应用的相关信息,包括名称、图标、用途说明、签名等。 下面介绍如何获取程序的签名。 解决方案: 选择程序,右键--->android tools --->签名发布,按步骤生成一个签名keystore和一个经过...
  • 出现这个情况: 1、如果你已经安装了,就先卸载...3、以上都没问题的话,你手机是不是有手机分身功能,如果有,看另一个手机分身是不是已经安装了不同签名同包名的应用,是的话就卸载已安装的,跟第一个情况一样; ...
  • 安卓APP应用签名不一致无法安装的解决方案

    万次阅读 热门讨论 2018-03-31 23:04:50
    教程链接https://mp.weixin.qq.com/s/tH_6ndQkYeWwIIegNPpOeQ最近安装公司开发的app时,突然提示应用签名冲突,无法安装程序,请先卸载旧版本后安装,这时候怎么办呢, 按照提示做,然鹅,当我卸载了所有开发测试版...
  • 问题如题 : 应用程序未安装:已安装了存在签名冲突的同名数据包。【解决方案】:1、检查项目的 包名、签名文件、keystore 的 key 和密码 是否一致;2、如果您是软件的开发人员,遇到该问题大概是因为您使用 Android...
  • 检查微信后台填写的应用签名是否正确: 命令行执行命令:keytool -list -v -keystore xxx.keystore/xxx.jks(签名文件绝对路径) -storepass xxx(签名文件密码) 将输出的签名文件信息中"证书指纹"下面的"MD5...
1 2 3 4 5 ... 20
收藏数 232,156
精华内容 92,862
关键字:

应用签名