当前位置:   article > 正文

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

app hash

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位哈希

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/700782
推荐阅读
相关标签
  

闽ICP备14008679号