У меня есть хэш-код, который я должен написать на java

import java.math.BigInteger;

импортировать java.security.MessageDigest; импортировать java.security.NoSuchAlgorithmException;

открытый класс EmailDecoder { public static void main(String[] args) { Строка encodedEmail = "f894e71e1551d1833a977df952d0cc9de44a1f9669fbf97d51309a2c6574d5eaa746cd" + "eb9ee1a5dfc771d280d33e5672e48a0b49e999dc7d88f3e7073040596e98687c4d1" + "730f3ac2fb2fe4f3e2fba56af628f412d7fdd02405f755a7a9ed59f2fd71f28ca8fc7500f" + .....5098b5499d";

    String decodedEmail = decodeEmail(encodedEmail);
    System.out.println(decodedEmail);
}

public static String decodeEmail(String encodedEmail) {
    StringBuilder decodedEmail = new StringBuilder();
    int length = encodedEmail.length();

    for (int i = 0; i < length; i += 64) {
        String substring = encodedEmail.substring(i, Math.min(i + 64, length));
        String reversed = reverseHash(substring);
        String character = reversed.substring(reversed.length() - 2);
        decodedEmail.append(character);
    }

    return decodedEmail.toString();
}

public static String reverseHash(String hash) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] bytes = new BigInteger(1, hexToBytes(hash)).toByteArray();
        byte[] digest = md.digest(bytes);
        StringBuilder sb = new StringBuilder();

        for (byte b : digest) {
            sb.append(String.format("%02x", b));
        }

        return sb.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

    return null;
}

public static byte[] hexToBytes(String hex) {
    byte[] bytes = new byte[hex.length() / 2];

    for (int i = 0; i < bytes.length; i++) {
        int index = i * 2;
        int j = Integer.parseInt(hex.substring(index, index + 2), 16);
        bytes[i] = (byte) j;
    }

    return bytes;
}

}

Вполне вероятно, что электронное письмо имеет четное количество символов и заканчивается на .com, и в этом случае последние две пары будут .c и om. Применяя хэш-функцию, которую они предоставляют, соответствует ли она конечным символам?

Richard Heap 11.07.2023 17:23

@RichardHeap, вы правы, это должен быть .com, но я не знаю, как расшифровать последние (.com)?

berry.11 11.07.2023 17:39

1 - вы подтвердили, что можете хэшировать Nano в 411dedd4fa525b61bffc4241266fb4634eef4018f94f265c6ba447d32be7‌​4ce6 - пока вы не сможете этого сделать, нет смысла продолжать. 2 - что вы знаете о хешах (спойлер - они НЕ шифруются)? Например, они обратимы? Итак, это вопрос расшифровки или что-то еще? 3 - Каково значение того, что они говорят вам, что каждая пара букв состоит из букв, цифр и @._? (PS — оказывается, что это не .com — это отвлекающий маневр)

Richard Heap 11.07.2023 17:55

Ответ вроде «[email protected]». Вам нужно написать простую программу для обратного хеширования каждой 32-символьной подстроки. Это явно тест, чтобы увидеть, сможете ли вы написать программу для декодирования более длинной шестнадцатеричной строки из 17 хэшей md5. Обычно обратное хеширование очень сложно и технически неосуществимо в общем случае, но если в каждом хеше «закодировано» всего 2 символа, это тривиально для программы.

Simon Goater 11.07.2023 21:56

@RichardHeap: я получаю 7af8f6243a524e0d551759d56095bb8af6f0c5daf82a4a39b0861a3c9fc3‌​cb89 за Nano.

President James K. Polk-Strike 11.07.2023 22:50

@ berry.11 Я не думаю, что было бы справедливо по отношению к вашему интервьюеру или хорошей практике, если бы я дал вам свой код. Это PHP, и все, что он делает, это объявляет функцию getchars(), которая принимает хэш md5 и сравнивает его с каждым хэшем из двух символов, как описано в вашем вопросе, возвращая два символа из соответствующего хэша. Основная часть программы перебирает входную строку, передает 17 хэшей функции и выводит результат. Это не сложная задача. Я не знаю Java, поэтому я не могу помочь вам отладить ваш код. Удачи.

Simon Goater 12.07.2023 11:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Саймон Гоутер был прав, вам нужно поддержать его ответ в комментариях.

Вот мой вывод (в качестве массива) [*, *, *, *, *, *, *, *, *, *, *, @n, an, o., co, m., tr] (отредактировано для Саймона ).

можешь поделиться кодом

berry.11 11.07.2023 22:59

Что ж, сначала мы должны спросить Саймона, все ли в порядке.

pilotJack 11.07.2023 23:08

какой язык ты использовал?

berry.11 11.07.2023 23:12

Я ОБОЖАЮ Java! Так вот что я использую. Какую нацию вы представляете? Например, где вы проживаете?

pilotJack 11.07.2023 23:16

мне это тоже нравится, я написал код на java, но он не работал, не могли бы вы помочь решить. я болгарин

berry.11 11.07.2023 23:21

Замечательно! Java — хороший язык для работы. В любом случае, насколько это важно? Я мог бы отправить его вам по электронной почте, учитывая, что вы немного разместите свою электронную почту здесь. Вы могли бы принять мой ответ, который указывает на Саймона. Хотите попробовать? Я копирую и вставляю код, без вложений, лол.

pilotJack 12.07.2023 00:37

я понимаю. не могли бы вы просто поделиться кодом без хэш-кода? потому что это важно 🙏

berry.11 12.07.2023 00:46

Я непреклонна в том, чтобы спросить Саймона. Это аккуратная маленькая проблема, и он должен получить кредит. Я лично не против поделиться.

pilotJack 12.07.2023 00:49

Мы могли бы поговорить о вашем коде. Хотите сделать это?

pilotJack 12.07.2023 01:17

конечно. в чем проблема с моим кодом?

berry.11 12.07.2023 03:28

привет, Саймон не поделился кодом, потому что его php. не могли бы вы поделиться своим java-кодом

berry.11 12.07.2023 14:21

Другие вопросы по теме