可以使用jarsigner对未签名的加固包进行签名。
建议使用之前对APP签名时使用的keystore对加固包进行签名
jarsigner-digestalgSHA1-sigalgMD5withRSA-verbose-keystore[your_key_store_path]-signedjar
[signed_apk_name][usigned_apk_name][your_key_store_alias]
your_key_store_path:密钥所在位置的绝对路径
signed_apk_name:签名后安装包名称
usigned_apk_name:未签名的安装包名称
your_key_store_alias:密钥的别名就是你自己创建的.keystore文件
平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以Debug面试进行编译的,因此ADT根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。
给apk签名可以带来以下好处:
应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同。
应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。
代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。
<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]>目的: 为了使Applet或者Java Web Start程序能够访问客户端本地资源,需要对Applet或者JWS程序jar包进行数字签名,之后客户端打开Applet或者JWS程序的时候会提示是否允许该程序访问本地资源,用户如果要用你的程序,当然只能选择OK了。这样你的程序就能按照某种访问权限来访问客户机的本地资源了。签名步骤: 1.将程序打成jar包。 这个我就不多说了,用eclipse,netbeans等开发工具很方便就能打包的。 2.用keytool命令生成.store文件。 在任意文件夹下建立一个keytool.bat文件,输入keytool -genkey -keystore xxx.keystore -alias xxx -validity 3650
保存,双击执行。将在当前目录下生成一个xxx.keystore文件, -alias后接的是别名,-validity后面接的是该证书有效天数,这里3650表示10年。(用这个证书签名的程序10年内有效)。 3.用jarsigner程序对jar包进行签名。 新建jarsinger.bat文件,输入 jarsigner -keystore xxx.keystore helloworld.jar xxx
签名(sign):在应用程序的特定字段写入特定的标记信息,表示该软件已经通过了签署者的审核。过程:使用私有密钥数字地签署一个给定的应用程序作用:
识别应用程序作者
检测应用程序是否发生改变
有种程序升级,当新程序与旧程序签名不一致时,会发生冲突认为不是同一APP,,要求新程序改包名
。。。
keytool 生成签名私钥命令
keytool -genkey -v -keyalg DSA -keysize 1024 -sigalg SHA1withDSA -validity 10000 -keystore Test.keystore -alias devel -keypass 123456 -storepass 123456
Keytool 选项
描述
-genkey产生一个键值对(公钥和私钥)
-v允许动作输出
-alias<alias_name> 键的别名。只有前八位字符有效。
-keyalg产生键的 加密 算法。支持DSA和RSA。
-keysize产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。
-dname
专有名称,描述谁创建的密钥。该值被用作自签名证书的颁发者和主题字段。注意可以不在命令行指定。如果没有指定keytool会提示(CN, OU, and so on)。
-keypass
键的密码。
主要为了安全起见,如果没提供,keytool会提示你输入。
-validity
键的有效期,单位:天
Note: A value of 10000 or greater is recommended.
-keystore.keystore用于存储私钥的文件。
-storepass
私钥存储文件的密码。
主要为了安全起见,如果没提供,keytool会提示你输入。这个密码不会存储在你的shell历史记录中。
jarsigner使用私钥签名
jarsigner -verbose -sigalg SHA1withDSA -digestalg SHA1 -keystore Test.keystore -storepass 123456 test.apk devel
参数:
Jarsigner 选项
描述
-keystore.keystore包含你私钥的存储文件
-verbose显示输出动作。
-sigalg签名算法,用 SHA1withRSA .
-digestalg消息摘要算法,用 SHA1 .
-storepass
存储文件的密码。
主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
-keypass
私钥的密码。
主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)