Проблема со сравнением подписи

#java

#java

Вопрос:

У меня возникла проблема при сравнении двух значений подписи. Получение обоих значений как одинаковых из журналов, но ввод только оператора else.

 private static final String SIGNATURE = "TLFjqb41Fg W/qAEw7GMefvr2VY=";

PackageInfo packageInfo = context.getPackageManager()
     .getPackageInfo(context.getPackageName(),
          PackageManager.GET_SIGNATURES);

for (Signature signature : packageInfo.signatures) {
    byte[] signatureBytes = signature.toByteArray();

    MessageDigest md = MessageDigest.getInstance("SHA");

    md.update(signature.toByteArray());

    final String currentSignature = Base64.encodeToString(md.digest(), Base64.DEFAULT);

    Log.d("REMOVE_ME", "Include this string as a value for SIGNATURE "   currentSignature);
    Log.d("REMOVE_ME", "SIGNATURE as a value for SIGNATURE value:"   SIGNATURE);

    //compare signatures

    if (SIGNATURE.equals(currentSignature)){
        Log.d("REMOVE_ME", "in  IF loop");
        return VALID;

    }else{
        Log.d("REMOVE_ME", "in  else loop");
        return INVALID;
    }
  

Получение журналов как:

 10-13 11:52:27.801: D/REMOVE_ME(16873): Include this string as a value for SIGNATURE TLFjqb41Fg W/qAEw7GMefvr2VY=
10-13 11:52:27.801: D/REMOVE_ME(16873): SIGNATURE as a value for SIGNATURE value:TLFjqb41Fg W/qAEw7GMefvr2VY=
10-13 11:52:27.801: D/REMOVE_ME(16873): in  else loop
  

Комментарии:

1. Помимо всего прочего, вы уверены, что действительно хотите немедленно вернуться в else блок? Какой смысл перебирать все сигнатуры (ваш for цикл), если вы собираетесь вернуться после просмотра первой. Тем не менее, я не понимаю, почему вы получаете журнал, который вы есть…

2. Вероятно, происходит что-то еще, что является очевидным недостатком в вашем коде, например. дополнительные скрытые символы, такие как конечные пробелы в одной из строк (не в этом случае, но вы поняли идею), или вы на самом деле не видите код из этого прогона. Возможно, вы обновили код, но видите старый файл журнала?

3. Не могли бы вы предоставить нам исходную строку для запуска вашего кода? Простейший пример просто для проверки части дайджеста с помощью equals.

4. Используя аналогичный код (почти из-за Java 6), он работает отлично. Добавьте немного trim(), чтобы убедиться, что это маловероятно. Вот код String signature = "test"; byte[] signBytes = signature.getBytes(); MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signBytes); final String currentSignature = Base64.encode(md.digest()); , который я запускаю в первый раз, чтобы скопировать результат в ПОДПИСЬ и запустить его снова.

5. Спасибо всем за ответы.. я удалил оператор else и также добавил trim.. Это сработало..