千家信息网

关于加密、签名及证书

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,去年在开发一个安卓小游戏的时候,还煞有其事地对apk包做了个人签名。当时只是照猫画虎的按书上说的步骤来做,也没深究为什么。最近比较详细的了解了一下java的安全机制,才发现原来有那么多一知半解的问题。
千家信息网最后更新 2025年12月01日关于加密、签名及证书

去年在开发一个安卓小游戏的时候,还煞有其事地对apk包做了个人签名。当时只是照猫画虎的按书上说的步骤来做,也没深究为什么。最近比较详细的了解了一下java的安全机制,才发现原来有那么多一知半解的问题。


先从非对称加密的公钥、私钥机制说起。所谓非对称就是指用私钥加密的内容要用公钥来解密(反过来用公钥加密也一样必须要用私钥来解密。公、私其实是对等的一对儿,并非指技术方面,而是针对发布范围来说的)


有了这种加密、解密的唯一性,我们就可以有这样一些结论:用私钥/公钥加密的,只有通过对应的公钥/私钥来解密;而能用某个公钥/私钥解开的,一定是用其私钥/公钥加密的。有点绕嘴,其实不难理解。利用这个特性,我们就可以达到一些互为验证的目的。


然后介绍一下相关操作。先说关于keystore的:


Keystore是存储密钥对集合的文件,所以也叫密钥库文件(之前都不知道可以存储多个)。利用jdk工具是这样生成的:


keytool -genkey -alias mykey1 -keypass <这个key的密码> -validity 1000 -keystore xxx.keystore


如果这个xxx.keystore文件还不存在,那么会新生成一个,同时要求输入一个对xxx.keystore文件进行读写的密码。这个和keypass后的密码参数不需要相同。


继续一条:

keytool -genkey -alias mykey2 -keypass <这个key的密码> -validity 1000 -keystore xxx.keystore


这个时候xxx.keystore文件已经存在了,所以这个命令是再追加进去一个密钥对。所以输入第一次设定的读写密码即可。


从字面意义看会以为alias是个可有可无的别名,但其实不是,这个参数是必须的,是一对密钥的"正式"的名字。即便我们不输入这个参数:-alias mykey1,那么系统也会自动生成一个叫做mykey的密钥对名字;

如果没有这个参数:-keypass <这个key的密码>,那么系统会提示输入。当然直接回车是设定为和库文件的读写密码相同。


那么现在呢,实际上xxx.keystore里已经存了两个密钥对,mykey1mykey2。可以用这个命令查看:

Keytool -list -keystore xxx.keystore,当然查看也是需要输入密码的


有了这些密钥对,即可以对jar文件进行签名了。命令是这样的:

jarsigner -keystore xxx.keystore -storepass <文件读写密码> -keypass <这个key的密码> xxx.jar mykey1


同样的,如果没有这个参数:-storepass <文件读写密码>,系统会要求输入。没有这个参数:-keypass <这个key的密码>,一种情况是mykey1的密码和库密码相同,那么就可以签名成功。如果不同,那就会报错。


导出公钥为一个证书,命令是:

Keytool -export -file xxx.cer -keystore xxx.keystore -alias mykey1,输入库密码后,会生成一个xxx.cer的证书文件。


一个库里可以有多个密钥,但一个证书里只有一个公钥。用命令keytool -printcert -file xxx.cer查看证书,结果是库密钥列表中的一个。


私钥一般用命令导不出来(也没有导出的必要)。但是可以用写代码来导出。


密码 公钥 密钥 文件 输入 加密 参数 命令 证书 相同 系统 生成 对称 只有 名字 多个 库文件 时候 机制 存储 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何删除异常数据库 滴滴软件开发 部队清退数据库外职工该怎么赔偿 入门软件开发前景如何 web后端对数据库要求高吗 数据库怎样把横表变成竖表 四川系统软件开发怎么样 战舰世界亚服服务器命令 网络安全技术对策图片 甲骨文云服务器改区域 软件开发应执行的国家标准 服务器一般用什么牌子 第五届强网杯网络安全大赛直播 爬虫股价数据库表设计 护苗网络安全的画 计算机中如何关闭网络服务器 常见服务器硬盘接口 20万的软件开发周期一般多长 高中网络技术应用html 公务员网络安全保卫 数据库防伪技术客户至上 在珠海做软件开发12K高吗 十四五网络安全工作总体目标是 轻量服务器可以装win10吗 怎么控制数据库的安全性 软件开发实习内容6 豫章学院学习软件开发好找工作吗 在线调查研究的先进网络技术有 车联网网络安全和数据安全指南 国家网络安全宣传周主题教育班会
0