Android培训班(53)

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } -->

Calculator.apk内容

为什么叫apk呢?其实apkAndroid Package的缩写,意思就是android安装包。

在Linux的目录下,可以查看Calculator.apk里的内容,如下图:

 

 

META-INF目录:这个目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。由于android应用程序发布都是一个包的方式,里面有很多文件,那么怎么样才能保证其包文件是完全出自开发人员之手呢?开发人员又是怎么样验证这份安装程序没有被修改过呢?这些都需要在开发人员编译时,同时生成相应的签名文件,也就是认证信息文件。当然有了签名文件只是判断是否有没有被别人修改过,但不能阻止别人去修改,然后再生成一份新的签名,比如对英文软件进行汉化。在这个目录下面三个文件:

    CERT.RSA

    CERT.SF

    MANIFEST.MF

CERT.RSACERT.SF文件是用来判断程序程序是否被别人修改。

MANIFEST.MF是对所有文件的SHA1算法的签名。

那么CERT.RSA是采用什么算法的呢?其实它是采用PKCS#7格式进行数字签名的。PKCS#7是由RSA安全体系在公钥加密系统中交换数字证书产生的一种加密标准,最近本的标准有PKCS#1#3#5#6#7#8#9#10,分别定义不同的协议标准。PKCS#7为密码信封封装标准,描述了密码操作(例如数字签名和数字信封)的数据的通用语法。该语法允许递归,例如一个数字信封可以嵌套在另一个数字信封里面,或者一个实体可以在一个已经封装的数据上签名。该语法同时允许添加如意属性,比如签名时间等。该标准和保密增强邮件(PEM)是兼容的,如果以PEM兼容形式构建,那么被签名后的数据和签名后又封装的数据内容可以很容易地被转化成PEM格式。

   讲了很多PKCS#7的基础东西,那么如何创建一个符合PKCS#7格式的数字签名呢?如果按照PKCS#7格式标准自己写的话将是很复杂很麻烦的一件事,但是好在微软已经给我们封装好了一个COM--CAPICOM,里面的数字签名就是符合PKCS#7格式的;还有一个开源的代码就是OpenSSL,如果你想更详细的了解PCKS#7的话,最好下一份OpenSSL的源码下来研究下,如果你只是想应用的话,我想CAPICOM更适合一点。

 

Res目录:这个目录主要保存资源的图片和窗口布局XML文件。

 

AndroidManifest.xml文件:这个文件主用来描述应用程序名称、权限、版本、引用的库文件等信息。它跟开发目录里的内容一样,但格式不一样,它是经过压缩的二进制文件。经过压缩后大大减少占用存储空间,对于移动应用程序来说是非常重要的,由于移动带宽有限,下载速度慢,使用费用高,存储空间比较小。

 

classes.dex文件:这个文件是java源码编译后生成的java字节码文件,最后经dex工具处理后生成dalvik虚拟机的字节码。

 

Resources.arsc文件:这个文件是编译后的二进制资源文件。

 

//QQ: 9073204 EMAIL:[email protected]

//蔡军生  2011-06-12

你可能感兴趣的:(java,虚拟机,android,加密,算法,存储)