Android的数字签名

作者&投稿:孟艺 (若有异议请与网页底部的电邮联系)
~     要确保可靠通信,要解决两个问题:第一,要确定消息的来源确实是其申明的那个人;其次,要保证信息在传递的过程中不被第三方篡改,即使被篡改了,也可以发觉出来。

    数字签名,就是为了解决这两个问题而产生的,它是对前面提到的非对称加密技术与数字摘要技术的一个具体的应用。

对于消息的发送者来说,先要生成一对公私钥对,将公钥给消息的接收者。

    如果消息的发送者有一天想给消息接收者发消息,在发送的信息中,除了要包含原始的消息外,还要加上另外一段消息。这段消息通过如下两步生成:

1)对要发送的原始消息提取消息摘要;

2)对提取的信息摘要用自己的私钥加密。

    通过这两步得出的消息,就是所谓的原始信息的数字签名。

    而对于信息的接收者来说,他所收到的信息,将包含两个部分,一是原始的消息内容,二是附加的那段数字签名。他将通过以下三步来验证消息的真伪:

1)对原始消息部分提取消息摘要,注意这里使用的消息摘要算法要和发送方使用的一致;

2)对附加上的那段数字签名,使用预先得到的公钥解密;

3)比较前两步所得到的两段消息是否一致。如果一致,则表明消息确实是期望的发送者发的,且内容没有被篡改过;相反,如果不一致,则表明传送的过程中一定出了问题,消息不可信。

    通过这种数字签名技术,确实可以有效解决可靠通信的问题。如果原始消息在传送的过程中被篡改了,那么在消息接收者那里,对被篡改的消息提取的摘要肯定和原始的不一样。并且,由于篡改者没有消息发送方的私钥,即使他可以重新算出被篡改消息的摘要,也不能伪造出数字签名。

    综上所述,数字签名其实就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

    很多时候根本就不具备事先沟通公钥的信息通道。那么如何保证公钥的安全可信呢?这就要靠数字证书来解决了。

    所谓数字证书,一般包含以下一些内容:

    证书的发布机构(Issuer)

    证书的有效期(Validity)

    消息发送方的公钥

    证书所有者(Subject)

·   指纹以及指纹算法

    数字签名

    解压 Android签名apk之后,会有一个META-INF文件夹,这里有三个文件:

MANIFEST.MF

逐一遍历里面的所有条目,如果是目录就跳过,如果是一个文件,就用SHA1(或者SHA256)消息摘要算法提取出该文件的摘要然后进行BASE64编码后,作为“SHA1-Digest”属性的值写入到MANIFEST.MF文件中的一个块中。该块有一个“Name”属性,其值就是该文件在apk包中的路径。

CERT.SF

1》计算这个MANIFEST.MF文件的整体SHA1值,再经过BASE64编码后,记录在CERT.SF主属性块(在文件头上)的“SHA1-Digest-Manifest”属性值值下

2》逐条计算MANIFEST.MF文件中每一个块的SHA1,并经过BASE64编码后,记录在CERT.SF中的同名块中,属性的名字是“SHA1-Digest

CERT.RSA

     会把之前生成的 CERT.SF文件, 用私钥计算出签名, 然后将签名以及包含公钥信息的数字证书一同写入  CERT.RSA  中保存。CERT.RSA是一个满足PKCS7格式的文件。

    如果你改变了apk包中的任何文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是验证失败,程序就不能成功安装。

    其次,如果你对更改的过的文件相应的算出新的摘要值,然后更改MANIFEST.MF文件里面对应的属性值,那么必定与CERT.SF文件中算出的摘要值不一样,照样验证失败。

    最后,如果你还不死心,继续计算MANIFEST.MF的摘要值,相应的更改CERT.SF里面的值,那么数字签名值必定与CERT.RSA文件中记录的不一样,还是失败。

    那么能不能继续伪造数字签名呢?不可能,因为没有数字证书对应的私钥。

所以,如果要重新打包后的应用程序能再Android设备上安装,必须对其进行重签名。


android的id是什么意思呀
Android设备ID通常指的是Android设备的唯一标识符,也称作Android ID或设备ID。要获取Android设备ID,可以使用Android SDK中的Settings.Secure类,并调用getString()方法来获取。1. Android设备ID的用途:Android设备ID是一个64位的十六进制数字,它在设备首次启动时生成,并且对于每个设备都是唯一的。它通常...

安卓P是安卓9吗
是的。安卓P是Android的系统代号,数字名称就是安卓9。2018年8月7日,Google发布了Android 9.0正式版,并宣布其系统代号为“Pie”,简称Android P。因此,用户完全可以把安卓P当作安卓9,两者只是叫法不同而已。Android P系统,迎来了全新的手势交互方式,改进了人工智能功能,可以预测用户的使用习惯和行...

android10 android17 啥意思
代表 Android SDK 版本,截止到目前,Android 共发布23个版本,其中 Android 17 代表 Android 4.2.2系统,Android 10代表Android 2.3.3系统。目前最新的 Android 23代表 Android 6.0系统,代号 Marshmallow(棉花糖)。

安卓手机的版本号是什么意思
手机版本是指手机的配置情况和当前手机系统的型号编号。而开发商会不定时的升级手机系统版本用于添加新功能安卓版本进行用户界面修改和部分内容修改、增加手机厂家编版本号2.2会面再加2.2.00123之类。列入2.1.1来说吧 其实这些数字并没有特别的含义,只是数字大,系统就更新。、第一位数:2。第一位数的...

安卓数字信号怎么弄
安卓数字信号步骤如下:1、首先,打开首页的通话按钮,就是拨号的那个界面。2、然后在拨号按钮,注意是跟正常打电话一样,按下符号“*3001#12345#*”,然后直接按下呼叫键。3、按下呼叫后,会出现Field test界面,是一个半白屏显示的界面。同时左上角会出现具体的信号数值。4、这时,长按手机电源键...

android31是什么手机
Android(中文译名安卓)不是具体型号的手机,而是美国谷歌公司开发的移动端操作系统,使用Andriod系统的智能手机被称作Andriod\/安卓手机。3、用户的设备名称。android—31这个数字是在微信登录过设备找到的这是用户的设备名称。“微信(WeChat)是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的...

亲们,android -10是什么手机
android-10并不是手机,而是android系统的一个版本。下面是数字对应的android系统。3 ---》android 1.5 4 ---》android 1.6 7 ---》android 2.1 8 ---》android 2.2 10---》android 2.3 11 ---》android 3.0 12 ---》android 3.1 13 ---》android 3.2 14 ---》android 4....

Android4.2.2中的数字是什么意思
Android后面跟着的数字是Android系统更新包的名称。随着版本的更迭,应用程序编程接口(API)等级不断发生。下面将目前为止所有API等级罗列出来,并与Android各版本一一对应。API等级1:Android 1.0API等级2:Android 1.1 Petit FourAPI等级3:Android 1.5 CupcakeAPI等级4:Android 1.6 DonutAPI等级5:...

手机启动android密码是什么
安卓系统的初始密码通常设定为123456(六位数字)或1234.0000等。对于一些杂牌手机,通常的初始密码可能是1234或1122。手机密码的设置是为了保护手机不被未授权使用。在设置“开机密码”、“手机密码”并启用该功能后,每次手机启动时都需要输入正确的密码才能使用,这确保了对手机本体的锁定。大多数手机的...

android29是什么设备类型
该名称并不代表设备类型。根据一门APP网查询得知,Android29指的是Android操作系统的第29个版本,而不是特定类型的设备。对于Android操作系统,数字“29”并不直接代表任何设备,而是标识了系统版本的迭代。这个版本会包含各种新功能、性能改进和安全性更新。

容县14731141956: Android签名有什么作用 -
茌欢骨折: 最简单直接的回答: 系统要求的. Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的! Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序. 这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的.

容县14731141956: 如何给Android应用程序签名 -
茌欢骨折: Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序.不管是模拟器还是真实手机.因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名.·所有的程序都必须...

容县14731141956: 如何获取android的数字签名及SHA1 -
茌欢骨折: 一、百度官方方法 第一种:使用keytool keytool -list -v keystorefile -storepass 123456 其中keytool为jdk自带工具;keystorefile为Android 签名证书文件 第二种:在adt 22中直接查看 如果使用adt 22,可以在eclipse中直接查看:winows -> ...

容县14731141956: android 怎样用keystore进行数字签名 -
茌欢骨折: Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序.不管是模拟器还是真实手机.因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名.·所有的程序都必须签名,

容县14731141956: android App数字签名 -
茌欢骨折: 使用Eclipse导出apk时选择自定义的Keystore.输入密码后,最后一步你就会看到这个自定义Keystore的SHA1码了,你不要使用系统自带的那个debug.keystore的SHA1码,每个自定义的Keystore其SHA1都不一样的,看我的截图:

容县14731141956: android如何实现电子签名呢? -
茌欢骨折: 右键项目名称 点Android tools 选择第三个 next 选择创建一个新的签名文件 创建就可以 ~~~

容县14731141956: Android如何签名? -
茌欢骨折: signapk.jar与eclipse export插件默认赋予程序一个DEBUG权限的签名 signapk.jar包含有系统权限(system api, permission),而eclipse export插件默认赋予程序一个DEBUG权限的签名.D:\work_feixun\GalleryBack>java -jar signapk.jar platform....

容县14731141956: android如何实现电子签名 -
茌欢骨折: 1.笔画识别技术2.加密解密技术

容县14731141956: android studio怎么获取数字签名 -
茌欢骨折: 方法一: 在 Eclipse中 数字签名(SHA1或MD5)的获取方法 为: 点击 Eclipse导航栏的Windows --> Preference --> Android --> Build 方法二: Android Studio 或 IntelliJ IDEA下开发Android 应用, 可以打开Terminal,使用keytool获取. 本人使用ubuntu14.04 作为开发机, 具体方法如下: $ cd ~/.android $ keytool -list -v -keystore debug.keystore 测试的默认口令为:android 或者 直接回车

容县14731141956: mono for android 怎么设置数字签名 -
茌欢骨折: 用java命令查看,如下: C:\jdk1.6.0_10\bin>jarsigner.exe -verify f:\ICBCAndroidBank.apk jar 已验证什么是数字签名?数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的.为什么要数...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网