1. 什么 是 android系统 签名
签名后才可以正常安装,可以保证软件的唯一性,可以检验软件是否他人盗用;
2. android studio签名有什么用
我们在使用Android Studio进行应用的发布时要进行签名,这个签名代表一种数字认证,每个公司的签名都不会相同的,所以是一种唯一的,别个假冒不了你的或修改你的源代码。
3. Android签名有什么作用
最简单直接的回答: 系统要求的。
Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!
Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。
这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
4. 安卓签名是什么 安卓签名是sha1吗
平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以Debug面试进行编译的,因此ADT根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。给apk签名可以带来以下好处:1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求纳漏山你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!2、应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块3、代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。
apk签名相当于程序的身份识别代码。
1、apk签名用于程序编译打包之后,手机在运行程序之前会先去验证程序的签名(可以看作类似于我们电脑上常搜运说的md5)是否合法,只有通过了验证的文件才会被运行,所以签名软件的作用的让文件通过手机的验证为合法,不同的手机、系统是对应不同的签名的。
2、可以用签名工具来更改。比如手机签名工具ZipSigner 2,可以对手机上的文件进行直接签名,支持apk、zip及jar格式,方便刷机或汉化的朋友。有些爱好修改安卓apk软件的用户有时候需要对apk文件进行修改,但是如果在电脑上操作的话,打包签名是十分复杂的,还必须安装java环境,可以说打包一个包是十分麻烦的,这款签名工具可以解决上述遇到的问题。
一、判断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码 ,一样就是相同的,反之,不是。
apk 签名可以带来的好处
所有的Android 应用程序都要求开发人员用一个证书进行数字签名,Android 系统不会
安装没有进行签名的应用程序。
平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以
Debug 面试进行编译的,因此ADT 根据会自动用默认的密钥和证书来进行签名,而在以发
布模式编译时,apk 文件就不会得到自动签名,这样就需要进行手工签名。
给apk 签名可以带来以下好处:
1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进
行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。
如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情
况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!
2.、应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进
程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块
的方式进行部署,而用户可以独立的升级其中的一个模块
3.、代码或者数据共享:Android 提供了基于签名的权限机制,那么一个应用程序就可
以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行
签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。
4.不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程
中,而且要让他们用相同的证书签名。
标签:作文经典 上一篇:梦见自己做饭什么意思 梦见别人做饭什么意思 下一篇:成语接龙民凋 民什么凋什么成语接龙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;
//签名示例
//
1、
下载签名应用,在手机中运行,根据提示输入程序的包名获得一个apk签名字符串,最后将这个字符串填到第一步的应用签名栏处。保存即可正常调试应用了。
2、
选择程序-右键——android tools——签名发布,按步骤生成一个签名keystore和一个经过签名的apk,安装该APK到手机。
3、
选择自己的程序,右键运行到手机。
4、
android 应用签名查看方法如下:
(1) debug的apk通过Eclipse查看,如下图:
(2) 某个keystore签名的应用,通过
Javakeytool-list-keystoreE:Trineakeystoreappsearch.keystore查看,会要求输入签名密码,默认为android。
平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以 Debug 面试进行编译的,因此ADT 根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk 文件就不会得到自动签名,这样就需要进行手工签名。 给apk 签名可以带来以下好处: 1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。 如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同! 2.、应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块 3.、代码或者数据共享:Android 提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。 4.不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。
签名后才可以正常安装,可以保证软件的唯一性,可以检验软件是否他人盗用;
签名,是开发者对apk文件的加密,防止程序被盗版,因为Android系统是linux内核,程序的区分是通过包名package来区分的,那别人也可能开发一个同包名的应用,这时安桌系统就会判断一下,如果签名相同则替换,如果签名不同则不允许安装重复包名的应用。至于你说什么时候变更,通常开发者是不能变更签名的,你改了签名程序就不能更新安装了
开发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就可以把签了名的系统文件烧到手机上了。
标签:作文经典 上一篇:梦见自己做饭什么意思 梦见别人做饭什么意思 下一篇:成语接龙民凋 民什么凋什么成语接龙5. Android签名机制之签名文件和数字证书的作用
Android签名机制目的是确保app的可靠通信,其一,要确定消息的来源确实是其申明
的那个人;其二,要保证信息在传递的过程中不被第三方篡改,即使被篡改了,也可以
发觉出来。
所谓数字签名,就是为了解决这两个问题而产生的,它是对非对称加密技术与数字摘要
技术的一个具体的应用。
对于消息的发送者来说,先要生成一对公私钥对,则穗将公钥给消息的接收者。
如果消息的发送者有一天想给消息接收者发消息,在发送的信息中,除了要包含原始的
消息外,还要加上另外一段消息。这段消息通过如下两步生成:
1)对要发送的原始消息提取消息摘要;
2)对提取的信息摘要用自己的私钥加密。
通过这两步得出的消息,就是所谓的原始信息的数字签名。
而对于信息的接收者来说,他所收到的信息,将包含两个部分,一是原始的消息内容,
二是附加的那段数字签名。他将通过以下三步来验证消息的真伪:
1)对原始消息部分提取消息摘要,注意这里使用的消息摘要算法要和发送方使用的一孙游卜致;
2)对附加上的那段数字签名,使用预先得到的公钥解密;
3)比较前两步所得到的两段消息是否一致。如果一致,则表明消息确实是期望的发送者
发的,且内容没有被篡改过;相反,如果不一致,则表明传送的过程中一定出了问题,
消息不可信。
通过这种所谓的数字签名技术,确实可以有效解决可靠通信的问题。如果原始消息在传
送的过程中被篡改了,那么在消息接收者那里,对被篡改的消息提取的摘要肯定和原始
的不一样。并且,由于篡改者没有消息发送方的私钥,即使他可以重新算出被篡改消息
的摘要,也不能伪造出数字签名。
那么数字签名呢?
综上所述,数字签名其实就是只有信息的发送者才能产生的别人无法伪造的一段数字
串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
不知道大家有没有注意,前面讲的这种数字签名方法,有一个前提,就是消息的接收者
必须要事先得到正确的公钥。如果一开始公钥就被别人篡改了,那坏人就会被你当成好
人,而真正的消息发送者给你发的消息会被你视作无效的。而且,很多时候根本就不具
备事先沟通公钥的信息通道。那么如何保证公钥的安全可信磨吵呢?这就要靠数字证书来解
决了。
所谓数字证书,一般包含以下一些内容:
证书的发布机构(Issuer)
证书的有效期(Validity)
消息发送方的公钥
证书所有者(Subject)
数字签名所使用的算法
数字签名
可以看出,数字证书其实也用到了数字签名技术。只不过要签名的内容是消息发送方的
公钥,以及一些其它信息。但与普通数字签名不同的是,数字证书中签名者不是随随便
便一个普通的机构,而是要有一定公信力的机构。这就好像你的大学毕业证书上签名的
一般都是德高望重的校长一样。一般来说,这些有公信力机构的根证书已经在设备出厂
前预先安装到了你的设备上了。所以,数字证书可以保证数字证书里的公钥确实是这个
证书的所有者的,或者证书可以用来确认对方的身份。数字证书主要是用来解决公钥的
安全发放问题。
综上所述,总结一下,数字签名和签名验证的大体流程如下图所示:
引用链接: https://www.cnblogs.com/dacainiao/p/5842987.html