У меня есть следующая реализация:
Signature[] sigs = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs)
{
Log.i(TAG, "Signature: " + SignatureUtil.getSHA1(sig.toByteArray()));
}
и ...
public class SignatureUtil
{
public static String getSHA1(byte[] sig)
{
MessageDigest digest = null;
try
{
digest = MessageDigest.getInstance("SHA1", "BC");
}
catch (Exception e)
{
try
{
return new String(sig, "UTF-8");
}
catch (UnsupportedEncodingException e1)
{
return new String(sig);
}
}
digest.update(sig);
byte[] hashtext = digest.digest();
return bytesToHex(hashtext);
}
//util method to convert byte array to hex string
private static String bytesToHex(byte[] bytes)
{
final char[] hexArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] hexChars = new char[bytes.length * 2];
int v;
for (int j = 0; j < bytes.length; j++)
{
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
}
В настоящее время у меня есть один результат этого метода, который может выглядеть следующим образом: 174AC857QTVSLK87ACQW3547KHOPP8787QASHI88
Я прочитал в этом вопросе , что это значение не может быть подделано или прочитано кем-либо.
Мои вопросы: Когда я подписываю свой ключ разблокировки, я получаю другой код или несколько кодов?Что произойдет, если кто-нибудь взломает мое приложение из-за манипулирования байтами или чего-то еще с помощью некоторых приложений для защиты от пиратства?Изменится ли тогда это значение?Я думаю, нет.В этом случае, могу ли я каким-то образом создать некоторую «контрольную сумму» моего приложения (которая наверняка изменится от сборки к сборке)?(потому что это именно то, чего я хочу достичь)