Android程序获得APP哈希值,Android – SMS Retriever API – 计算应用程序的哈希字符串问题...

import android.content.Context;

import android.content.ContextWrapper;

import android.content.pm.PackageManager;

import android.content.pm.Signature;

import android.os.Build;

import android.util.Base64;

import android.util.Log;

import java.nio.charset.StandardCharsets;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.ArrayList;

import java.util.Arrays;

/*

This is a helper class to generate your message hash to be included in your SMS message.

Without the correct hash,your app won't recieve the message callback. This only needs to be

generated once per app and stored. Then you can remove this helper class from your code.

*/

public class AppSignatureHelper extends ContextWrapper {

public static final String TAG = AppSignatureHelper.class.getSimpleName();

private static final String HASH_TYPE = "SHA-256";

public static final int NUM_HASHED_BYTES = 9;

public static final int NUM_BASE64_CHAR = 11;

public AppSignatureHelper(Context context) {

super(context);

getAppSignatures();

}

/**

* Get all the app signatures for the current package

* @return

*/

public ArrayList getAppSignatures() {

ArrayList appCodes = new ArrayList<>();

try {

// Get all package signatures for the current package

String packageName = getPackageName();

PackageManager packageManager = getPackageManager();

Signature[] signatures = packageManager.getPackageInfo(packageName,PackageManager.GET_SIGNATURES).signatures;

// For each signature create a compatible hash

for (Signature signature : signatures) {

String hash = hash(packageName,signature.toCharsString());

if (hash != null) {

appCodes.add(String.format("%s",hash));

}

Log.d(TAG,"Hash " + hash);

}

} catch (PackageManager.NameNotFoundException e) {

Log.e(TAG,"Unable to find package to obtain hash.",e);

}

return appCodes;

}

private static String hash(String packageName,String signature) {

String appInfo = packageName + " " + signature;

try {

MessageDigest messageDigest = MessageDigest.getInstance(HASH_TYPE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));

}

byte[] hashSignature = messageDigest.digest();

// truncated into NUM_HASHED_BYTES

hashSignature = Arrays.copyOfRange(hashSignature,NUM_HASHED_BYTES);

// encode into Base64

String base64Hash = Base64.encodeToString(hashSignature,Base64.NO_PADDING | Base64.NO_WRAP);

base64Hash = base64Hash.substring(0,NUM_BASE64_CHAR);

Log.d(TAG,String.format("pkg: %s -- hash: %s",packageName,base64Hash));

return base64Hash;

} catch (NoSuchAlgorithmException e) {

Log.e(TAG,"hash:NoSuchAlgorithm",e);

}

return null;

}

}

在项目中添加上面的类,然后从LoginActivity中调用它,如下所示

AppSignatureHelper appSignatureHelper = new AppSignatureHelper(LoginActivity.this);然后你会得到11位哈希

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值