这一段是原创,说得不对的地方还请支出(:
首先要分清楚MD(Message Digest 信息摘要)5(第五代)和SHA1(Secure Hash Algorithm 安全哈希算法)并不是加密算法,应该归类为HASH(哈希)算法或者称之为摘要算法(Digest Algorithm),即将无限制长度的字符串转换成固定长度(MD5是16个字符16*8=128bits,SHA1是20个字节=160bits 20*8bits的长度)。得到的是摘要,输入是无限制的字符。
虽然说现在有碰撞算法可以找到两个字符使用MD5生成为一样的MD5摘要字符,但是并不能说MD5是可逆的
即便是彩虹表也只是类似一个大数据库,在里面找相同的罢了。因为两个不同的字符串经过MD5算法之后,有可能生成相同的MD5或者SHA1值。这就像是X+Y=1024,X、Y的组合有许多种,并不能100%准确的指出,XY到底是两个什么值。
但是MD5和SHA1并不是加密算法。没有所谓的公钥私钥。而常见的加密算法有RSA,它属于是非对称的加密算法。公钥位于客户端,私钥位于服务器端。私钥是只有加密者才能拥有的。需要严加保护。【一个公钥对应一个私钥。】(有待考证)。一般来说生成私钥是需要用户自定义密码的,例如java中进行私钥生成的过程中,需要开发者自行生成私钥。公钥能够正确的解密出加密前的内容。
下面一段是转载的,但是苦于找不到出处,如果侵犯了版权,请联系我,立马删除
SHA1即安全哈希算法(Secure Hash Algorithm),用于签名;RSA是目前最有影响力的公钥加密算法。
说到这就的提到公钥和私钥:公钥、私钥分居客户端和服务器端,分别用于加密和解密。同时,私钥还用于签名,公钥还用于验证签名。
说到这就的提到公钥和私钥:公钥、私钥分居客户端和服务器端,分别用于加密和解密。同时,私钥还用于签名,公钥还用于验证签名。
毕设做的是Android应用重打包检测,首先就需要批量检测Android应用之间签名是否一致。所以在这里介绍一下在终端中如何写脚本或者直接输入命令批量检测应用签名是否一致。
Android应用的发布形式apk中包含的签名加密方法除了RSA还有DSA,所以不能只从apk中提取常见的META-INF/CERT.RSA,第一步应该是检查apk中具体的签名文件是什么。
此时得到的cert_XSA可能是META-INF/*.RSA或者META-INF/*.DSA。
接下来从apk中提取具体的签名文件。
此时会在当前目录得到cert_XSA文件。
然后对于得到的签名文件,提取其中签名的MD5值
这时候yourapp.certMD5这个文件中就保存了yourapp.apkk中的签名MD5值。
Android应用的发布形式apk中包含的签名加密方法除了RSA还有DSA,所以不能只从apk中提取常见的META-INF/CERT.RSA,第一步应该是检查apk中具体的签名文件是什么。
FILE="yourapp.apk"
cert_XSA=`jar tf $FILE | grep SA`
接下来从apk中提取具体的签名文件。
jar xf $FILE $cert_XSA
然后对于得到的签名文件,提取其中签名的MD5值
keytool -printcert -file $cert_XSA | grep MD5 > "$FILE.certMD5"