Android/Android 일반

Hash Code 구하는 코드

lipnus 2019. 1. 20. 21:41
반응형


SMS Retriever 할때 필요한 11자리 Hash코드를 구하는 소스


keytool~ 커맨드에 쳐서 하는게 잘 안되서 이걸로 하니까 된다.

Util.java에 넣고 호출해서 사용.

public class Util {
public static final String TAG = Util.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;

/**
* get App Signatures
*/
public static ArrayList<String> getAppSignatures(Context context) {
ArrayList<String> appCodes = new ArrayList<>();


try {
// Get all package signatures for the current package
String packageName = context.getPackageName();
PackageManager packageManager = context.getPackageManager();
Signature[] signatures = packageManager.getPackageInfo(packageName,
PackageManager.GET_SIGNATURES).signatures;

// For each signature create a compatible hash
for (Signature signature : signatures) {
String hash = getHash(packageName, signature.toCharsString());
if (hash != null) {
appCodes.add(String.format("%s", hash));
}
Log.d(TAG, String.format("이 값을 SMS 뒤에 써서 보내주면 됩니다 : %s", hash));
}
} catch (PackageManager.NameNotFoundException e) {
Log.d(TAG, "Unable to find package to obtain hash. : " + e.toString());
}
return appCodes;
}

private static String getHash(String packageName, String signature) {
String appInfo = packageName + " " + signature;
try {
MessageDigest messageDigest = MessageDigest.getInstance(HASH_TYPE);
// minSdkVersion이 19이상이면 체크 안해도 됨
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, 0, 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("\nPackage : %s\nHash : %s", packageName, base64Hash));
return base64Hash;
} catch (NoSuchAlgorithmException e) {
Log.d(TAG, "hash:NoSuchAlgorithm : " + e.toString());
}
return null;
}
}




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

getSimpleName()은 클래스의 이름을 가져온다.

http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-getClass-%EC%82%AC%EC%9A%A9-TIP

반응형

'Android > Android 일반' 카테고리의 다른 글

SMS Retriever API - 2  (0) 2019.01.20
SMS Retriever API - 1  (0) 2019.01.20
http 접근 허용  (0) 2018.11.30
에뮬레이터에서 localhost로 접속  (0) 2018.11.24
추천 라이브러리  (0) 2018.11.24