这篇文章主要介绍了 Android 获取 apk 签名指纹的 md5 值以防止重新被打包的实现方法, 结合实例形式详细分析了 Android 获取 apk md5 值的常用技巧, 需要的朋友可以参考下
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
本文实例讲述了 Android 获取 apk 签名指纹的 md5 值以防止重新被打包的实现方法。分享给大家供大家参考,具体如下:
做个记录 (这里只是 Java 层的签名校验,java 层容易被破解,我建议 apk 加固下)
获取 md5 值来进行 Apk 签名校验, 可以防止 apk 重新被打包。
下面我说说怎么获取 apk 签名的 md5 值 (有三种方法)
1. 用代码获取签名指纹的 md5 值
- /**
- * MD5加密
- * @param byteStr 需要加密的内容
- * @return 返回 byteStr的md5值
- */
- 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();
- }
- /**
- * 获取app签名md5值
- */
- public String getSignMd5Str() {
- try {
- PackageInfo packageInfo = mActivity.getPackageManager().getPackageInfo(mActivity.getPackageName(), PackageManager.GET_SIGNATURES);
- Signature[] signs = packageInfo.signatures;
- Signature sign = signs[0];
- String signStr = encryptionMD5(sign.toByteArray());
- return signStr;
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }
- return "";
- }
2. keytool 工具
使用 keytool 工具获取签名 md5 信息,下面 key 是签名文件
- C:\Program Files\Java\jdk1.8.0_05\bin>keytool -list -v -keystore C:\Users\Administrator\Desktop\key
3. Eclipse 里面可以查看签名信息 这里就不赘述
希望本文所述对大家 Android 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0331/238724.html