Androidアップグレードapk署名ファイルチェック
12480 ワード
アップグレードapkプロセス:サーバから更新されたapkをダウンロードする---apkを検証する---apkをインストールする
本稿では,apkに対する署名ファイルの検証について述べるが,実際には,本機にインストールされたapkの署名とサーバからダウンロードされたapkの署名を取得し,2つの署名ファイルのMD 5を計算し,MD 5が同じであれば署名ファイルが正しいことを示す.
cmdで検証:1、apkファイルを解凍する2、RSAファイルのfingerprintsを取得する
署名ファイルのMD 5、SHA 1が得られます.2つのファイルのMD 5またはSHA 1を比較し、同じ署名であれば
本稿では,apkに対する署名ファイルの検証について述べるが,実際には,本機にインストールされたapkの署名とサーバからダウンロードされたapkの署名を取得し,2つの署名ファイルのMD 5を計算し,MD 5が同じであれば署名ファイルが正しいことを示す.
boolean sigMd5 = veritySignature(getUpdateApkName(), downloadpath + filename);
private boolean veritySignature(String pkgName, String filePath) {
try {
LogUtils.d("pkgName:" + pkgName + " filaPath:" + filePath);
//
Signature pkgSig = getPackageManager()
.getPackageInfo(pkgName, PackageManager.GET_SIGNATURES)
.signatures[0];
// apk
Signature apkSig = Objects.requireNonNull(getPackageManager()
.getPackageArchiveInfo(filePath, PackageManager.GET_SIGNATURES))
.signatures[0];
// md5
String pkgSigMd5 = getMd5(pkgSig);
String apkSigMd5 = getMd5(apkSig);
LogUtils.d("pkgSigCode:" + pkgSigMd5 + " apkSigCode:" + apkSigMd5);
if (pkgSigMd5.equals(apkSigMd5)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private String getMd5(Signature signature) {
return encryptionMD5(signature.toByteArray());
}
public static String encryptionMD5(byte[] byteStr) {
MessageDigest messageDigest = null;
StringBuffer md5StrBuff = new StringBuffer();
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(byteStr);
byte[] byteArray = messageDigest.digest();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
} else {
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return md5StrBuff.toString();
}
cmdで検証:1、apkファイルを解凍する2、RSAファイルのfingerprintsを取得する
keytool -printcert -file G:\test\testapk\META-INF\CERT.RSA
署名ファイルのMD 5、SHA 1が得られます.2つのファイルのMD 5またはSHA 1を比較し、同じ署名であれば