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;
}
}
@RichardHeap, вы правы, это должен быть .com, но я не знаю, как расшифровать последние (.com)?
1 - вы подтвердили, что можете хэшировать Nano в 411dedd4fa525b61bffc4241266fb4634eef4018f94f265c6ba447d32be74ce6 - пока вы не сможете этого сделать, нет смысла продолжать. 2 - что вы знаете о хешах (спойлер - они НЕ шифруются)? Например, они обратимы? Итак, это вопрос расшифровки или что-то еще? 3 - Каково значение того, что они говорят вам, что каждая пара букв состоит из букв, цифр и @._? (PS — оказывается, что это не .com — это отвлекающий маневр)
Ответ вроде «[email protected]». Вам нужно написать простую программу для обратного хеширования каждой 32-символьной подстроки. Это явно тест, чтобы увидеть, сможете ли вы написать программу для декодирования более длинной шестнадцатеричной строки из 17 хэшей md5. Обычно обратное хеширование очень сложно и технически неосуществимо в общем случае, но если в каждом хеше «закодировано» всего 2 символа, это тривиально для программы.
@RichardHeap: я получаю 7af8f6243a524e0d551759d56095bb8af6f0c5daf82a4a39b0861a3c9fc3cb89 за Nano.
@ berry.11 Я не думаю, что было бы справедливо по отношению к вашему интервьюеру или хорошей практике, если бы я дал вам свой код. Это PHP, и все, что он делает, это объявляет функцию getchars(), которая принимает хэш md5 и сравнивает его с каждым хэшем из двух символов, как описано в вашем вопросе, возвращая два символа из соответствующего хэша. Основная часть программы перебирает входную строку, передает 17 хэшей функции и выводит результат. Это не сложная задача. Я не знаю Java, поэтому я не могу помочь вам отладить ваш код. Удачи.





Саймон Гоутер был прав, вам нужно поддержать его ответ в комментариях.
Вот мой вывод (в качестве массива) [*, *, *, *, *, *, *, *, *, *, *, @n, an, o., co, m., tr] (отредактировано для Саймона ).
можешь поделиться кодом
Что ж, сначала мы должны спросить Саймона, все ли в порядке.
какой язык ты использовал?
Я ОБОЖАЮ Java! Так вот что я использую. Какую нацию вы представляете? Например, где вы проживаете?
мне это тоже нравится, я написал код на java, но он не работал, не могли бы вы помочь решить. я болгарин
Замечательно! Java — хороший язык для работы. В любом случае, насколько это важно? Я мог бы отправить его вам по электронной почте, учитывая, что вы немного разместите свою электронную почту здесь. Вы могли бы принять мой ответ, который указывает на Саймона. Хотите попробовать? Я копирую и вставляю код, без вложений, лол.
я понимаю. не могли бы вы просто поделиться кодом без хэш-кода? потому что это важно 🙏
Я непреклонна в том, чтобы спросить Саймона. Это аккуратная маленькая проблема, и он должен получить кредит. Я лично не против поделиться.
Мы могли бы поговорить о вашем коде. Хотите сделать это?
конечно. в чем проблема с моим кодом?
привет, Саймон не поделился кодом, потому что его php. не могли бы вы поделиться своим java-кодом
Вполне вероятно, что электронное письмо имеет четное количество символов и заканчивается на
.com, и в этом случае последние две пары будут.cиom. Применяя хэш-функцию, которую они предоставляют, соответствует ли она конечным символам?