ionic 通过sha值对apk 进行完整性校验

该博客介绍了如何通过创建一个Cordova插件来获取APK的SHA值,并与服务器上的值进行比较,以确保应用程序的完整性。在Ionic应用中调用这个插件,可以实现客户端的SHA校验,进一步在服务器端验证哈希值,增强安全性。
摘要由CSDN通过智能技术生成

通过创建coardov 插件的方式获取自身APK的sha值 上传到服务器与程序发布时的sha值进行对比,已完成完整性校验

插件源码如下:

package cordova.plugin.getApksSha;

import javafx.scene.control.Alert;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;

import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;

/**
 * This class echoes a string called from JavaScript.
 */
public class getApksSha extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals("coolMethod")) {
            String message = args.getString(0);
            this.coolMethod(message, callbackContext);
            return true;
        }else if(action.equals("apkShaCheck")){
            this.apkShaCheck(callbackContext);
            return true;
        }
        return false;
    }

    private void coolMethod(String message, CallbackContext callbackContext) {
        if (message != null && message.length() > 0) {
            callbackContext.success(message);
        } else {
            callbackContext.error("Expected one non-empty string argument.");
        }
    }

    private void apkShaCheck(CallbackContext callbackContext) {
        MessageDigest msgDigest = null;
        try {
            msgDigest = MessageDigest.getInstance("SHA-1");
            byte[] bytes = new byte[1024];
            int byteCount;
            String apkPath = this.cordova.getActivity().getApplicationContext().getPackageCodePath();
            FileInputStream fis = new FileInputStream(new File(apkPath));
            while ((byteCount = fis.read(bytes)) > 0) {
                msgDigest.update(bytes, 0, byteCount);
            }
            BigInteger bi = new BigInteger(1, msgDigest.digest());
            String sha = bi.toString(16);
            fis.close();
            // 这里添加从服务器中获取哈希值然后进行对比校验
            callbackContext.success(sha);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ionic 调用插件如下:

先安装插件 》 安装命令 cordova plugin add 插件本地真实地址\getApksSha

业务类进行调用插件》

declare let cordova: any;

cordova.plugins.getApksSha.apkShaCheck(0,result => { 
      if (result != '' && result != null && result != undefined) {
        alert(result);
      }
});

服务器端对获取到的值进行验证,根据个人情况在服务端完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值