关于keytool和jarsigner工具签名的使用小结
在我们日常Android应用开发中,我们都要对我们开发的apk做签名处理,或者加固,增强我们apk的安全性,防止被逆向反编译,在apk签名这块,我们一般采用JDK自动工具来签名,下面就对相关工具做个简要说明和小结。
首先、我们需要先在电脑上安装JDK和环境变量配置:
JDK下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,在一系列的安装后,确保可以使用keytool 和 jarsigner两个工具能有使用,例如具体位置如下:
1.制作签名工具
C:\>where keytool
C:\Program Files\Java\jdk1.7.0_45\bin\keytool.exe
2.进行签名工具
C:\>where jarsigner
C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe
其次,签名分两个部分,即生成签名签名密钥和对apk做签名:
第一步:生成私钥,使用工具 - keytool:
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历史记录中。
keytool -genkey -v -keyalg DSA -keysize 1024 -sigalg SHA1withDSA -validity 20000 -keystore MyDevel.keystore -alias devel -keypass MyDevel -storepass MyDevel
(图片来源网络)
第二步:用私钥进行签名 - jarsigner:
Jarsigner 选项描述
-keystore.keystore包含你私钥的存储文件
-verbose显示输出动作。
-sigalg签名算法,用 SHA1withRSA.
-digestalg消息摘要算法,用 SHA1.
-storepass存储文件的密码。
主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
-keypass私钥的密码。
主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
jarsigner -verbose -sigalg SHA1withDSA -digestalg SHA1 -keystore myDevel.keystore -storepass MyDevel test.apk devel
(图片来源网络)
至此,我们就可以把重签名后的apk安装包安装到模拟器或手机上面使用,另外,如果是对已有apk做过逆向分析或反编译修改过图标、代码的,再采用回编译后我们仍然要用上面的工具对生成的新apk做重签名,这样才能安装到手机,因为通过apktool回编译后的apk已经破坏了原有签名,即不带签名,那么这个时候就不能安装到真机或模拟器,我们只能通过keytool和jarsigner工具来重签名,对于逆向反编译感兴趣的朋友,可以参考51CTO的这门课程:Android逆向反编译代码注入 - 迈入安卓APP逆向安全大门,学习更多相关知识。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 《HelloGitHub》第 108 期