Android: поведение PackageInfo.signatures? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть следующая реализация:

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

Я прочитал в этом вопросе , что это значение не может быть подделано или прочитано кем-либо.

Мои вопросы: Когда я подписываю свой ключ разблокировки, я получаю другой код или несколько кодов?Что произойдет, если кто-нибудь взломает мое приложение из-за манипулирования байтами или чего-то еще с помощью некоторых приложений для защиты от пиратства?Изменится ли тогда это значение?Я думаю, нет.В этом случае, могу ли я каким-то образом создать некоторую «контрольную сумму» моего приложения (которая наверняка изменится от сборки к сборке)?(потому что это именно то, чего я хочу достичь)

...