导航:首页 > APP软件 > 安卓签名认证

安卓签名认证

发布时间:2023-02-12 08:54:35

安卓签名是什么 安卓签名是sha1吗

Android签名有什么作用?

平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以Debug面试进行编译的,因此ADT根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。给apk签名可以带来以下好处:1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!2、应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块3、代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。

apk签名是什么意思?

apk签名相当于程序的身份识别代码。

1、apk签名用于程序编译打包之后,手机在运行程序之前会先去验证程序的签名(可以看作类似于我们电脑上常说的md5)是否合法,只有通过了验证的文件才会被运行,所以签名软件的作用的让文件通过手机的验证为合法,不同的手机、系统是对应不同的签名的。

2、可以用签名工具来更改。比如手机签名工具ZipSigner 2,可以对手机上的文件进行直接签名,支持apk、zip及jar格式,方便刷机或汉化的朋友。有些爱好修改安卓apk软件的用户有时候需要对apk文件进行修改,但是如果在电脑上操作的话,打包签名是十分复杂的,还必须安装java环境,可以说打包一个包是十分麻烦的,这款签名工具可以解决上述遇到的问题。

android中如何确认使用的是什么平台签名

一、判断Apk是否签名用命令:jarsigner -verify -verbose -certs 1、如果有Android Debug字样就是debug2、如果已经签名: [证书的有效期为13-8-31 下午2:31至41-1-16 下午2:31]二、判断Apk签名是否一致jdk 需要安装;想查demo.apk所使用的签名的fingerprint,可以这样做:1、查找apk里的rsa文件 Windows 平台: > jar tf demo .apk findstr RSA linux 平台: $ jar tf demo .apk grep RSA META-INF/CERT.RSA 2、 从apk中解压rsa文件 jar xf demo .apk META-INF/CERT.RSA 3、获取签名的fingerprints keytool -printcert -file META-INF/CERT.RSA 证书指纹: MD5: 5A:5A:96:63:8E:EF:FC:66:9E:BC:1C:2A:A9:1E:E5:95 SHA1: 44:BD:33:2D:C5:21:AE:78:D5:04:92:1A:39:FD:AC:01:E2:32:3C:AB SHA256: 2F:C0:A3:8C:0D:42:84:70:48:78:44:A4:2E:64:5B:50:B3:B3:1E:33:94:62:A3:9F:2F:10:DD:EF:D7:CF:02:0B 签名算法名称: SHA1withRSA 版本: 3 两个apk是否同签名,比较签名的MD5码或SHA1码 ,一样就是相同的,反之,不是。

Android签名有什么作用-apk签名可以带来的好处 详细??

apk 签名可以带来的好处

所有的Android 应用程序都要求开发人员用一个证书进行数字签名,Android 系统不会

安装没有进行签名的应用程序。

平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以

Debug 面试进行编译的,因此ADT 根据会自动用默认的密钥和证书来进行签名,而在以发

布模式编译时,apk 文件就不会得到自动签名,这样就需要进行手工签名。

给apk 签名可以带来以下好处:

1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进

行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。

如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情

况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!

2.、应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进

程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块

的方式进行部署,而用户可以独立的升级其中的一个模块

3.、代码或者数据共享:Android 提供了基于签名的权限机制,那么一个应用程序就可

以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行

签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。

4.不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程

中,而且要让他们用相同的证书签名。

标签:作文经典 上一篇:梦见自己做饭什么意思 梦见别人做饭什么意思 下一篇:成语接龙民凋 民什么凋什么成语接龙

android api 签名是什么意思

android api 签名是api调用的时候需要按照约定的参数生成一个字符串,对方接收到后校验参数,合法后接受请求并返回结果。

所有android端的API的有效访问URL包括以下三个部分:

1. 资源访问路径,如/v1/deal/find_deals;

2. 请求参数:即API对应所需的参数名和参数值param=value,多个请求参数间用&连接

如deal_id=1-85462&appkey=00000;

3. 签名串,由签名算法生成

签名算法如下:

1. 对除appkey以外的所有请求参数进行字典升序排列;

2. 将以上排序后的参数表进行字符串连接,如...keyNvalueN;

3. 将app key作为前缀,将app secret作为后缀,对该字符串进行SHA-1计算,并转换成16进制编码;

4. 转换为全大写形式后即获得签名串

签名串获得后,将其作为sign参数附加到对应的URL中,即可正常访问API。

注意:请保证HTTP请求数据编码务必为UTF-8格式,URL也务必为UTF-8编码格式。

参考代码:

// 定义申请获得的appKey和appSecret

String appkey = "XXXXXXXX";

String secret = "";

String apiUrl = "[api.dianping]";

// 创建参数表

Map paramMap = new HashMap ;

paramMap.put("format", "json");

paramMap.put("city", "上海");

paramMap.put("latitude", "31.21524");

paramMap.put("longitude", "121.420033");

paramMap.put("category", "美食");

paramMap.put("region", "长宁区");

paramMap.put("limit", "20");

paramMap.put("radius", "2000");

paramMap.put("offset_type", "0");

paramMap.put("has_coupon", "1");

paramMap.put("has_deal", "1");

paramMap.put("keyword", "泰国菜");

paramMap.put("sort", "7");

// 对参数名进行字典排序

String[] keyArray = paramMap.keySet.toArray(new String[0]);

Arrays.sort(keyArray);

// 拼接有序的参数名-值串

StringBuilder stringBuilder = new StringBuilder;

stringBuilder.append(appkey);

for (String key : keyArray)

{

stringBuilder.append(key).append(paramMap.get(key));

}

stringBuilder.append(secret);

String codes = stringBuilder.toString;

// 字符串连接示例

// XXXXXXXXcategory美食city上海formatjsonhas_coupon1has_deal1keyword泰国菜latitude31.21524limit20longitude121.420033offset_type0radius2000region长宁区sort7

// SHA-1编码, 这里使用的是Apache codec,即可获得签名(shaHex会首先将中文转换为UTF8编码然后进行sha1计算,使用其他的工具包请注意UTF8编码转换)

/*

* 以下sha1签名代码效果等同

* byte[] sha = .apachemons.codec.digest.DigestUtils.sha(.apachemons.codec.binary.StringUtils.getBytesUtf8(codes));

* String sign = .apachemons.codec.binary.Hex.encodeHexString(sha).toUpperCase;

*/

String sign = .apachemons.codec.digest.DigestUtils.shaHex(codes).toUpperCase;

//签名示例

//

android 应用签名怎么获取

1、

下载签名应用,在手机中运行,根据提示输入程序的包名获得一个apk签名字符串,最后将这个字符串填到第一步的应用签名栏处。保存即可正常调试应用了。

2、

选择程序-右键——android tools——签名发布,按步骤生成一个签名keystore和一个经过签名的apk,安装该APK到手机。

3、

选择自己的程序,右键运行到手机。

4、

android 应用签名查看方法如下:

(1) debug的apk通过Eclipse查看,如下图:

(2) 某个keystore签名的应用,通过

Javakeytool-list-keystoreE:Trineakeystoreappsearch.keystore查看,会要求输入签名密码,默认为android。

Android APK签名有什么用呢?

平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以 Debug 面试进行编译的,因此ADT 根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk 文件就不会得到自动签名,这样就需要进行手工签名。 给apk 签名可以带来以下好处: 1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。 如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同! 2.、应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块 3.、代码或者数据共享:Android 提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。 4.不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。

什么 是 android系统 签名

签名后才可以正常安装,可以保证软件的唯一性,可以检验软件是否他人盗用;

安卓开发的过程中签名在什么情况下会变更

签名,是开发者对apk文件的加密,防止程序被盗版,因为Android系统是linux内核,程序的区分是通过包名package来区分的,那别人也可能开发一个同包名的应用,这时安桌系统就会判断一下,如果签名相同则替换,如果签名不同则不允许安装重复包名的应用。至于你说什么时候变更,通常开发者是不能变更签名的,你改了签名程序就不能更新安装了

运行android程序会默认生成签名吗

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

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

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

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

二、签名的注意事项

Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序。不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。

Android签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。

系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。

可以使用标准工具-Keytool and Jarsigner-生成密钥,来签名应用程序的.apk文件。

签名后需使用zipalign优化程序。

模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。Eclipse菜单的Window -> Preferences -> Android –> Build 下显示的是我们默认的调试用的签名数字证书。

正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。

三、签名方法:

1.使用Keytool 和jarsigner工具签名(在jdk/bin目录下)

1.生成签名keystore:

确保电脑上安装了JDK,因为我们将使用JDK自带的创建和管理数字证书的工具Keytool。在命令行下输入如下命令:

keytool -genkey -v -keystore app.keystore -alias alias_name -keyalg RSA -validity 20000

-alias 后面跟的是别名这里是alias_name

-keyalg 是加密方式这里是RSA

-validity 是有效期这里是20000

-keystore 就是要生成的keystore的名称这里是app.keystore

然后按回车键

按回车后首先会提示你输入的密码:这个在签名时要用的,要记住

然后会再确认你的密码。

之后会依次叫你输入姓名、组织单位、组织名称、城市区域、省份名称、国家代码(CN)等。

2.签名:

jarsigner -verbose -keystore app.keystore -signedjar app_signed.apk app.apk alias_name

-keystore: keystore的名称

-signedjar app_signed.apk: 指定签名后生成的APK名称

app.apk: 目标APK

然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。

3.查看签名:

jarsigner -verify app_signed.apk

查看是否签名,如果已经签名会打印 "jar verified".

jarsigner -verify -verbose -certs app_signed.apk

查看签名详细信息。

4.通过zipalign工具进行优化apk(android自带的工具,./build/tools/zipalign)

zipalign -v 4 app_signed.apk androidres.apk 对apk优化

zipalign -c -v 4 androidres.apk 查看apk是否经过优化

2.使用eclipse ADT工具签名

在Package Explorer 窗口,右键,选择Android Tools--->Export Signed Application Package 然后按照提示一步一步,生成已签名的apk。通过eclipse也可以导出未签名的APK文件。

注:需要输入两次密码,第一次是私钥密码,第二次时私钥别名的密码。

3.eclipse在debug模式下自动签名(无须手动配置):

在debug模式下用eclipse 的ADT为android签名,只要应用程序在eclipse下开发,系统就会自动给apk签名和优化。

在Eclipse中Windows > Preferences > Android > Build可以看到你keysotre的位置;

四、生成Android系统签名

上面讲的Android数字签名大多是与Android APK相关,做CTS 认证时,需要用到Android系统签名。为什么需要给Android系统签个名才能进行CTS认证呢?原来我们通过make -j4编译出来的system.img使用的是test key,这种类型的key只适用于开发阶段,而且这种秘钥是公开的,谁都可以使用。当发布一款android产品,就需要另外给整个系统签个名,防止被别人盗用。这种系统就是release版本的Android系统。

1、生成加密key文件

要对Android系统进行签名,需要生成四种类型的key文件。

a)releasekey (testkey)

b)media

c)shared

d)platform

1)进入/android_src/development/tools目录。

2)使用make_key工具生成签名文件。需要分别生成 releasekey,media,shared,platform。

./make_key releasekey '/C=CN/ST=JiangSu/L=NanJing/O=pany/OU=Department/CN=Your Name/emailAddress=YourE-mailAddress' (系统将会提示输入针对各种key的密码,按照提示输入即可)

将会生成 releasekey.pk8 和 releasekey.x509.pem文件,其中 *.pk8是生成的私钥,而*.x509.pem是公钥,生成时两者是成对出现的.

注:如果出现 openssl : relocation error :openssl : symbol ...尝试用 sudo 执行命令,问题解决了!

2.回到根目录android_src。

命令执行的时候都最好在工程的根目录下执行,要不然脚本用到的某些文件找不到的。

3.编译系统

make -j4 PRODUCT-generic-user dist

其中generic 表示生成的TARGET_PRODUCT类型为generic,

user代表TARGET_BUILD_VARIANT为user版本。

编译完成之后回在android_src/dist/目录内生成个proct_generic-user_files开头的zip文件.这就是我们需要进行签名的文件系统.

4.开始签名

./build/tools/releasetools/sign_target_files_apks -d key_directory/ out/dist/proct_mol-target_files.zip out/dist/signed_target_files.zip

通过sign_target_files_apks 脚本,完成android系统的签名工作.

key_directory/ 表示key所在的目录。

out/dist/proct_mol-target_files.zip 源文件。

out/dist/signed_target_files.zip 生成签名的目标文件。

可能会出现:

ERROR: no key specified for:

CalendarWidget.apk

Contacts_yellowpage.apk

SnsAppMain.apk

这表示,签名并没有成功,原因是由于有些apk程序已经签过名了或者找不到对应的key. 这需要我们对apk设置过滤,不对上面的应用进行签名.方法如下:

通过参数"-e =" 来过滤这些应用.

./build/tools/releasetools/sign_target_files_apks -d key_directory/ -e CalendarWidget.apk= -e Contacts_yellowpage.apk= -e SnsAppMain.apk= -e out/dist/proct_mol-target_files.zip out/dist/signed_target_files.zip

输入该命令时会提示输入key的密码,会出现四次密码输入提示。分别为四种类型的key的密码。

5.生成image文件

./build/tools/releasetools/img_from_target_files out/dist/signed-target-files.zip signed-img.zip

用img_from_target_files 命令对生成的igned-target-files.zip文件进行打包,signed-img.zip包含了boot.img,userdate.img,system.img文件等.

6.通过fastboot下载signed-img.zip文件

fastboot update signed-img.zip

通过fastboot就可以把签了名的系统文件烧到手机上了。

标签:作文经典 上一篇:梦见自己做饭什么意思 梦见别人做饭什么意思 下一篇:成语接龙民凋 民什么凋什么成语接龙

⑵ 安卓系统怎么关闭签名验证

不能关闭,只能对软件或者rom进行编辑之后签名

⑶ 如何对Android的APP进行签名

1、在Android Studio中打开工程,点击“Build”菜单下的“Generate Signed APK”。

⑷ 如何生成Android的签名证书

cmd命令生成android签名证书,有空在写一篇eclipse导出带签名的apk,这里面包括生成新的签名。现在还是讲讲在cmd怎么操作生成签名证书。
1、dos下进入JDK的bin目录
运行如下命令:keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
(-validity 20000代表有效期天数),命令完成后,bin目录中会生成android.keystore
示例:
C:\Program Files (x86)\Java\jdk1.8.0_25\bin>
keytool -genkey -alias test.keystore -keyalg RSA -validity 20000 -keystore d:\test.keystore
ps:-alias test 生成的keystore别名,-keyalg RSA 加密和数字签名的算法,-validity 20000 有效天数

输入密钥库口令:123456
再次输入新口令:123456
您的名字与姓氏是什么?
[Unknown]: rob
您的组织单位名称是什么?
[Unknown]: abc
您的组织名称是什么?
[Unknown]: abc
您所在的城市或区域名称是什么?
[Unknown]: guangzhou
您所在的省/市/自治区名称是什么?
[Unknown]: guangzhou
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=rob, OU=abc, O=abc, L=guangzhou, ST=guangzhou, C=cn是否正确?
[否]: y
输入 <test> 的密钥口令
(如果和密钥库口令相同, 按回车):
如果没有错误则回去查看D盘根目录下,多了test.keystore

所以第一次输入的是,密钥库的密码。
最后输入时密钥别名的密码。到这里生成签名就搞定啦。
2、查看md5指纹验证
输入keytool -list -v -alias androiddebugkey -keystore 再加上刚刚从红色框中复制出来的内容
我这里的就是keytool -list -v -alias androiddebugkey -keystore C:\Users\ZLQ\.android\debug.keystore了,回车
-alias androiddebugkey 这个是别名
-keystore C:\Users\ZLQ\.android\debug.keystore 具体位置的密钥库
要求输入密码,密码是android,至此就可以拿到MD5认证指纹了

⑸ Android V1及V2签名原理简析

Android为了保证系统及应用的安全性,在安装APK的时候需要校验包的完整性,同时,对于覆盖安装的场景还要校验新旧是否匹配,这两者都是通过Android签名机制来进行保证的,本文就简单看下Android的签名与校验原理,分一下几个部分分析下:

签名是摘要与非对称密钥加密相相结合的产物,摘要就像内容的一个指纹信息,一旦内容被篡改,摘要就会改变,签名是摘要的加密结果,摘要改变,签名也会失效。Android APK签名也是这个道理,如果APK签名跟内容对应不起来,Android系统就认为APK内容被篡改了,从而拒绝安装,以保证系统的安全性。目前Android有三种签名V1、V2(N)、V3(P),本文只看前两种V1跟V2,对于V3的轮密先不考虑。先看下只有V1签名后APK的样式:

再看下只有V2签名的APK包样式:

同时具有V1 V2签名:

可以看到,如果只有V2签名,那么APK包内容几乎是没有改动的,META_INF中不会有新增文件,按Google官方文档:在使用v2签名方案进行签名时,会在APK文件中插入一个APK签名分块,该分块位于zip中央目录部分之前并紧邻该部分。在APK签名分块内, 签名和签名者身份信息会存储在APK签名方案v2分块中,保证整个APK文件不可修改 ,如下图:

而V1签名是通过META-INF中的三个文件保证签名及信息的完整性:

V1签名是如何保证信息的完整性呢?V1签名主要包含三部分内容,如果狭义上说签名跟公钥的话,仅仅在.rsa文件中,V1签名的三个文件其实是一套机制,不能单单拿一个来说事,

如果对APK中的资源文件进行了替换,那么该资源的摘要必定发生改变,如果没有修改MANIFEST.MF中的信息,那么在安装时候V1校验就会失败,无法安装,不过如果篡改文件的同时,也修改其MANIFEST.MF中的摘要值,那么MANIFEST.MF校验就可以绕过。

CERT.SF个人觉得有点像冗余,更像对文件完整性的二次保证,同绕过MANIFEST.MF一样,.SF校验也很容易被绕过。

CERT.RSA与CERT.SF是相互对应的,两者名字前缀必须一致,不知道算不算一个无聊的标准。看下CERT.RSA文件内容:

CERT.RSA文件里面存储了证书公钥、过期日期、发行人、加密算法等信息,根据公钥及加密算法,Android系统就能计算出CERT.SF的摘要信息,其严格的格式如下:

从CERT.RSA中,我们能获的证书的指纹信息,在微信分享、第三方SDK申请的时候经常用到,其实就是公钥+开发者信息的一个签名:

除了CERT.RSA文件,其余两个签名文件其实跟keystore没什么关系,主要是文件自身的摘要及二次摘要,用不同的keystore进行签名,生成的MANIFEST.MF与CERT.SF都是一样的,不同的只有CERT.RSA签名文件。也就是说前两者主要保证各个文件的完整性,CERT.RSA从整体上保证APK的来源及完整性,不过META_INF中的文件不在校验范围中,这也是V1的一个缺点。V2签名又是如何保证信息的完整性呢?

前面说过V1签名中文件的完整性很容易被绕过,可以理解 单个文件完整性校验的意义并不是很大 ,安装的时候反而耗时,不如采用更加简单的便捷的校验方式。V2签名就不针对单个文件校验了,而是 针对APK进行校验 ,将APK分成1M的块,对每个块计算值摘要,之后针对所有摘要进行摘要,再利用摘要进行签名。

也就是说,V2摘要签名分两级,第一级是对APK文件的1、3 、4 部分进行摘要,第二级是对第一级的摘要集合进行摘要,然后利用秘钥进行签名。安装的时候,块摘要可以并行处理,这样可以提高校验速度。

APK是先摘要,再签名,先看下摘要的定义:Message Digest:摘要是对消息数据执行一个单向Hash,从而生成一个固定长度的Hash值,这个值就是消息摘要,至于常听到的MD5、SHA1都是摘要算法的一种。理论上说,摘要一定会有碰撞,但只要保证有限长度内碰撞率很低就可以,这样就能利用摘要来保证消息的完整性,只要消息被篡改,摘要一定会发生改变。但是,如果消息跟摘要同时被修改,那就无从得知了。

而数字签名是什么呢(公钥数字签名),利用非对称加密技术,通过私钥对摘要进行加密,产生一个字符串,这个字符串+公钥证书就可以看做消息的数字签名,如RSA就是常用的非对称加密算法。在没有私钥的前提下,非对称加密算法能确保别人无法伪造签名,因此数字签名也是对发送者信息真实性的一个有效证明。不过由于Android的keystore证书是自签名的,没有第三方权威机构认证,用户可以自行生成keystore,Android签名方案无法保证APK不被二次签名。

知道了摘要跟签名的概念后,再来看看Android的签名文件怎么来的?如何影响原来APK包?通过sdk中的apksign来对一个APK进行签名的命令如下:

其主要实现在 android/platform/tools/apksig 文件夹中,主体是ApkSigner.java的sign函数,函数比较长,分几步分析

先来看这一步,ApkUtils.findZipSections,这个函数主要是解析APK文件,获得ZIP格式的一些简单信息,并返回一个ZipSections,

ZipSections包含了ZIP文件格式的一些信息,比如中央目录信息、中央目录结尾信息等,对比到zip文件格式如下:

获取到 ZipSections之后,就可以进一步解析APK这个ZIP包,继续走后面的签名流程,

可以看到先进行了一个V2签名的检验,这里是用来签名,为什么先检验了一次?第一次签名的时候会直接走这个异常逻辑分支,重复签名的时候才能获到取之前的V2签名,怀疑这里获取V2签名的目的应该是为了排除V2签名,并获取V2签名以外的数据块,因为签名本身不能被算入到签名中,之后会解析中央目录区,构建一个DefaultApkSignerEngine用于签名

先解析中央目录区,获取AndroidManifest文件,获取minSdkVersion(影响签名算法),并构建DefaultApkSignerEngine,默认情况下V1 V2签名都是打开的。

第五步与第六步的主要工作是:apk的预处理,包括目录的一些排序之类的工作,应该是为了更高效处理签名,预处理结束后,就开始签名流程,首先做的是V1签名(默认存在,除非主动关闭):

步骤7、8、9都可以看做是V1签名的处理逻辑,主要在V1SchemeSigner中处理,其中包括创建META-INFO文件夹下的一些签名文件,更新中央目录、更新中央目录结尾等,流程不复杂,不在赘述,简单流程就是:

这里特殊提一下重复签名的问题: 对一个已经V1签名的APK再次V1签名不会有任何问题 ,原理就是:再次签名的时候,会排除之前的签名文件。

可以看到目录、META-INF文件夹下的文件、sf、rsa等结尾的文件都不会被V1签名进行处理,所以这里不用担心多次签名的问题。接下来就是处理V2签名。

V2SchemeSigner处理V2签名,逻辑比较清晰,直接对V1签名过的APK进行分块摘要,再集合签名,V2签名不会改变之前V1签名后的任何信息,签名后,在中央目录前添加V2签名块,并更新中央目录结尾信息,因为V2签名后,中央目录的偏移会再次改变:

签名校验的过程可以看做签名的逆向,只不过覆盖安装可能还要校验公钥及证书信息一致,否则覆盖安装会失败。签名校验的入口在PackageManagerService的install里,安装官方文档,7.0以上的手机优先检测V2签名,如果V2签名不存在,再校验V1签名,对于7.0以下的手机,不存在V2签名校验机制,只会校验V1,所以,如果你的App的miniSdkVersion<24(N),那么你的签名方式必须内含V1签名:

校验流程就是签名的逆向,了解签名流程即可,本文不求甚解,有兴趣自己去分析,只是额外提下覆盖安装,覆盖安装除了检验APK自己的完整性以外,还要校验证书是否一致只有证书一致(同一个keystore签名),才有可能覆盖升级。覆盖安装同全新安装相比较多了几个校验

这里只关心证书部分:

Android V1及V2签名签名原理简析

仅供参考,欢迎指正

⑹ android 生成签名证书

使用keytool -genkey命令生成证书:

回车后会提示:

以上命令运行完成后就会生成证书,路径为“D: est.keystore”。

注意:上述信息填写要规范,乱填有可能会影响应用上架应用市场。

可以使用以下命令查看:

会输出以下格式信息:

其中证书指纹信息(Certificate fingerprints):

MD5
证书的MD5指纹信息(安全码MD5)
SHA1
证书的SHA1指纹信息(安全码SHA1)
SHA256
证书的SHA256指纹信息(安全码SHA245)

直接通过一个apk,获取安装到手机的第三方应用签名的apk包。 详情: https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html
注意事项
云端打包默认会添加V1/V2签名,已知V1签名不支持2048位的DSA算法,使用2048-bit DSA key云端打包可能失败,提示以下错误:

解决方法

查看证书算法的方法
使用“keytool -list -v”查看证书信息,看“Subject Public Key Algorithm: ”项的信息,如下表示使用DSA算法:

【详见】 https://ask.dcloud.net.cn/article/38778

⑺ 安卓 自动签名 以及如何验证一个apk包是用你的签名文件签名的

## 使用自动签名的方法

1. 创建或者修改 ~/.gradle/gradle.properties

2. 在gradle.properties 文件中增加下面的内容.(具体内容需要根据实际来更改)

STORE_PASSWORD=xysys

KEY_ALIAS=xxsasd

KEY_PASSWORD=988asdf

3. 这样每次build的时候,总是用keystore来签名,不会用生成的debug来签名了

## 使用命令行来构建APK

进入项目最高层目录,找到 gradlew. 执行下面的命令来构建所有类型的APK,自动使用官方签名

## 验证签名是官方签名

1. 使用keytool 获取apk包的指纹

例如:

2. 查看keystore的指纹

apk的签名指纹跟keystore中的指纹一致表明该包是用keystore来签名的。

注意:若java版本是7之前的,需要先把apk解压,

来看包的指纹。

⑻ 如何对android的apk签名进行验证

方法/步骤

1
菜单菜单键,键入cmd命令进入命令模式。如图:

2
命令模式中,进入JDK的安装目录的Bin子目录下。(我的JDK安装在E盘,所以先进入E盘,然后再进入JDK安装目录)

3
通过keytool.exe 工具来创建keystore库.
输入以下命令:
keytool -genkeypair -alias - mydemo.keystore -keyalg RSA -validity 100
-keystore mydemo.keystore
命令说明如下:
-genkeypair :指定生成数字证实
-alias :指定生成数字证书的别名
-keyalg:指定生成数字证书的算法 这里如RSA算法
-validity:指定生成数字证书的有效期
-keystore :指定生成数字证书的存储路径。 (这里默认在keytool.exe 目录下)
回车 出现如图交互式界面 输入数字证书费密码 作者 公司等详细信息
如图 :

4
完成后,keystore库创建完成,你可以在指定的保存目录下找到 如图:

5
使用jarsigner命令对未签名的APK安装包进行签名。使用JDK安装目录下bin子目录下的jarsigner.exe工具来进行签名。
然后把未签名的apk也拷贝到此目录。如图:

6
使用如下命令进行签名:
jarsigner -verbose -keystore mydemo.keystore -signedjar
-Note.apk Notes.apk mydemo.keystore
以上命令的说明:
-verbose:指定生成详细输出
-keystore:指定数字证书存储路径
-signedjar:该选项的三个参数为 签名后的apk包 未签名的apk包 数字证书别名
注意有效期哦。

7
签名后的apk 如图:

8
sdk目录下tool目录下使用zipalign.exe工具优化APK安装包。
将已经签名的apk包放在zipalign.exe同目录下 如图:

9
使用如下命令:
zipalign -f -v 4 -Note.apk -Notes.apk
命令说明:
-f :指定强制覆盖已有文件
-v 指定生成详细输出
4:指定档案整理基于的字节数 一般是4 也有基于32位的。
-Note.apk :优化前APK
-Notes.apk 优化后的APK

10
运行命令后,在该目录下生成一个-Notes.apk,这个就是优化过的APK安装包
,该安装包可以对外发布。
如图:
如果能对你有帮助,希望你能收藏和支持。

http://jingyan..com/article/3c48dd3491d91fe10be358f4.html

阅读全文

与安卓签名认证相关的资料

热点内容
videojs苹果无法播放 浏览:496
vivo手机怎么桌面建文件夹 浏览:429
液压控制模块怎么编程 浏览:249
word加下划线颜色 浏览:425
g71的编程应用怎么操作 浏览:100
切换文件目录linux 浏览:286
同步压缩文件内容 浏览:866
诸城中考查询网站的密码是什么 浏览:615
怎么自动读取usb数据 浏览:944
自如app如何看户型图 浏览:511
一般程序编程对机子配置要求如何 浏览:43
拉伸实验数据出现水平是什么原因 浏览:615
完美世界怎么很多app不能看了 浏览:688
隐藏网络为什么别人可以连我不行 浏览:355
超级终端发送文件超时 浏览:24
文件多少m有什么意思 浏览:63
microsoftword2010 浏览:773
国务院通信大数据行程卡在哪里 浏览:581
打印机和电脑数据线连好怎么操作 浏览:877
iphone打开html文件 浏览:63

友情链接