一、数字签名概述

所谓"数字签名"就是通过某种password运算生成一系列符号及代码组成电子password进行签名,来取代书写签名或印章。

数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的。由于别人假冒不了发送方的签名。

二是数字签名能确

定消息的完整性。

由于数字签名的特点是它代表了文件的特征。文件假设发生改变,数字签名的值也将发生变化。

二、Android系统中数字签名的使用范围
眼下在android系统中,在两个地方使用了数据签名,一是应用程序。二是OTA升级。
应用程序中使用数字签名主要用来标识程序的唯一性。OTA升级中使用数字签名主要用来验证数据的完整性。

三、生成数字签名的方法
1、用Java中的数字签名工具keytool
签名首先要有一个keystore文件。keystore是由jdk自带的工具keytool产生。
window上生成的详细方式例如以下:
開始-〉执行->cmd->cd到你安装的jdk下的bin文件夹下, 然后输入
keytool -genkey -alias test.keystore -keyalg RSA -validity 10000 -keystore test.keystore
然后按回车首先提示输入password。 然后会确认你的password。之后会依次叫你输入相关信息如姓名,组织单位等之后就是输入
test.keystore 主password(如果和keystorepassword同样。按回车)我在这里设和keystore同样,之后你就会在bin文件夹下找到生成
的test.keystore。
相关參数意义例如以下:
-alias 后跟的是别名, 这里是test.keystore
-keyalg是加密方式这里是RSA
-validity是有效期这里是10000天
-keystore就是要生成的keystore的名称,这里是test.keystore
keystore生成后。如今能够进行签名了, 如今把你要进行签名的apk放到一个当前文件夹下。然后利用jdk提供的工具
jarsigner.exe进行签名,详细操作例如以下:
jarsigner -verbose -keystore test.keystore -signedjar new.apk test.apk test.keystore
2、在源代码下进行签名
Android源代码文件夹development\tools下有make_key脚本,  用来生成一个密钥对。 这个密钥对与keytool生成的key在形式上不
一样,但内容和作用是一致的。

生成公钥:
openssl genrsa -3 -outtestkey.pem 2048
转换成X509证书格式:
openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000-subj ‘xx’
生成私钥:
openssl pkcs8 -in testkey.pem-topk8 -outform DER -out testkey.pk8 –nocrypt

APK签名命令:

java -jar signapk publickey.x509[.pem]privatekey.pk8 input.apk output.apk
升级包进行签名: (注:理论上用keytool应该也能对升级包进行签名。但眼下我还不知道详细步骤)
java -jar signapk –w publickey.x509[.pem]privatekey.pk8 input.zip output.zip

最新文章

  1. D3.js学习(七)
  2. Ubuntu 下使用declare的问题
  3. mysql数据库常规命令操作
  4. C#实现http协议下的多线程文件传输
  5. spring4 定时任务
  6. 1.Bloom filter
  7. HW3.20
  8. ASP.NET自定义控件加载资源WebResource问题
  9. python3.x元组打印错误 TypeError: unsupported operand type(s) for %: 'NoneType' and 'tuple'
  10. 【我的书】《Unity Shader入门精要》出版上市
  11. 在图像上增加文字 C#
  12. module.exports和exports.md
  13. nginx和php-fpm调用方式
  14. Oracle数据库设置为归档模式的操作方法
  15. GDI+绘制五星红旗
  16. 服务请求比较慢SYN flooding
  17. Notes on Noise Contrastive Estimation and Negative Sampling
  18. redis学习(四)redis事务
  19. 电脑不能使用ArcMap 提示由于系统时间不对造成的怎么办?转
  20. javascript刷新页面代码

热门文章

  1. Xtts v4 xttdriver.pl & xtt.properties
  2. Python基本数据类型和其常用方法
  3. TimesTen客户端DSN配置
  4. 几个免费 IP 归属地查询 API
  5. Windows 那些坑
  6. js 中标签的增删 方法
  7. sql 行列转换
  8. solidity语言
  9. Resharper 的快捷键
  10. typeScript入门(一)构建环境和数据类型