Android加密 JNI NDK 验证签名和包名

ndk的环境配置就不写了,网上很多

首先新建一个项目,然后在包名下新建一个类,定义自己需要的native方法

public class SingatureClass {
   

    //验证包名
    public native String verificationPackage(Object context); 

    //验证签名
    public native String verificationSign(Object context);
}

其次要获取到项目的签名值
这里需要注意的地方是debug包和release包的签名是不一样的,如果要获取release包的签名值,则需要把该方法生成的签名值先写入本地日志, 然后从日志中获取签名值,将获取到的签名值复制到.c文件中

public static String getSignature(Context context) {
        try {
            /** 通过包管理器获得指定包名包含签名的包信息 **/
            PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
            /******* 通过返回的包信息获得签名数组 *******/
            Signature[] signatures = packageInfo.signatures;
            /******* 循环遍历签名数组拼接应用签名 *******/
            return signatures[0].toCharsString();
            /************** 得到应用签名 **************/
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

接下来生成.h文件
打开Terminal,
输入cd app/src/main/java,键入Enter
然后输入javah -d ../jni -classpath . -jni 包名.类名
如果出现错误:“错误: 编码GBK的不可映射字符”,
则输入javah -d ../jni -classpath . -jni -encoding UTF-8 包名.类名

这里写图片描述

在main目录下新建jni文件夹,将生成的.h文件移动到jni目录下
这里写图片描述

然后在jni目录先新建c/c++文件
将.h中的生成的方法复制到新建的c文件中,并且添加引用
将签名值和包名进行赋值
下面贴出代码

#include "com_lee_signatureencryption_SingatureClass.h"
#include <jni.
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值