Намеренно создайте два файла, чтобы иметь тот же хеш?

Это не красиво, но работает: реализовать тип, подобный CancelWithRunnableFuture, который вы можете предоставить Runnable для ..., который Runnable вызывается внутри метода cancel().

@Service
class AsyncService {
    @Async("taskExecutor")
    public Future<Task> startAsyncProcess(Task task) {
        Thread threadToInterruptOnCancel = new Thread(() -> System.out.println("Some continuous async db write"));
        threadToInterruptOnCancel.start();

        return new CancelWithRunnableFuture(
                       AsyncResult.forValue(task),
                       () -> threadToKillOnCancel.interrupt());
    }
}

class CancelWithRunnableFuture<V> implements Future<V> {
    private Future<V> delegate;
    private Runnable runOnCancel;

    public CancelWithRunnableFuture(Future<V> delegate, Runnable runOnCancel) {
        this.delegate = delegate;
        this.runOnCancel = runOnCancel;
    }

    @Override
    public boolean cancel(boolean mayInterruptIfRunning) {
        //
        // The Runnable is run here!
        //
        runOnCancel.run();

        return delegate.cancel(mayInterruptIfRunning);
    }

    @Override
    public boolean isCancelled() {
        return delegate.isCancelled();
    }

    @Override
    public boolean isDone() {
        return delegate.isDone();
    }

    @Override
    public V get() throws InterruptedException, ExecutionException {
        return delegate.get();
    }

    @Override
    public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
        return delegate.get(timeout, unit);
    }

}
6
задан starblue 8 March 2009 в 06:23
поделиться

6 ответов

MD5 обычно считают небезопасным, если хэш-коллизии являются главным беспокойством. SHA1 аналогично больше не считает приемлемым американское правительство. Существует, была конкуренция полным ходом для нахождения заменяющего хеш-алгоритма, но рекомендация в данный момент состоит в том, чтобы использовать семейство SHA2 - SHA-256, SHA-384 или SHA-512. [Обновление: 02.10.2012 NIST выбрали SHA 3, чтобы быть алгоритмом Keccak.]

Можно попытаться создать собственный хеш — это, вероятно, не было бы столь же хорошо, как MD5, и 'безопасность через мрак' аналогично не желательны.

Если Вы хотите безопасность, хешируете с несколькими хеш-алгоритмами. Способность одновременно создать файлы, которые имеют хэш-коллизии с помощью многих алгоритмов, является чрезмерно невероятной. [И в свете комментариев позвольте мне прояснить: Я имею в виду, публикуют и SHA-256 и значения Джакузи для файла — не комбинирующий хеш-алгоритмы для создавания единственной стоимости, но использующий отдельные алгоритмы для создавания отдельной стоимости. Обычно поврежденный файл не будет соответствовать ни одному из алгоритмов; если, случайно, кому-то удалось создать стоимость коллизии с помощью одного алгоритма, шанс также создания второй коллизии в одном из других алгоритмов незначителен.]

Общественность TimeStamp использует массив алгоритмов. Посмотрите, например, sqlcmd-86.00.tgz для иллюстрации.

18
ответ дан 8 December 2019 в 03:54
поделиться

Если пользователь не знает Вашего алгоритма хеширования, он также не может проверить Вашу подпись на документе, который Вы на самом деле подписали.

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

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

4
ответ дан 8 December 2019 в 03:54
поделиться

Почему Вы пытаетесь создать свой собственный хеш-алгоритм? Что случилось с SHA1HMAC?

Да, существуют повторения для хешей.
Любой хеш, который короче, чем простой текст, является обязательно меньшей информацией. Это означает, что будут некоторые повторения. Ключ для хешей - то, что повторения трудно перепроектировать.

Считайте CRC32 - наиболее часто используемым как хеш. Это - 32-разрядное количество. Поскольку существуют больше, чем 2^32 сообщения во вселенной, затем будут повторения с CRC32. Та же идея относится к другим хешам.

2
ответ дан 8 December 2019 в 03:54
поделиться

Существует иерархия трудности (для взломщика) здесь. Легче найти два файла с тем же хешем, чем генерировать тот для соответствия данному хешу, и легче сделать позже, если Вы не должны уважать ограничения формы/содержания/длин.

Таким образом, если возможно использовать четко определенную структуру документа и длины, можно сделать жизнь взломщиков немного тяжелее, какой хеш подчиненного Вы используете.

2
ответ дан 8 December 2019 в 03:54
поделиться

Я не думаю придумывающий Ваш собственный хеш-алгоритм, хороший выбор.

Другой хороший вариант используется Соленый MD5. Например, вход к Вашей хеш-функции MD5 добавляется со строкой "acidzom! #" прежде, чем передать функции MD5.

Существует также хорошее чтение в Slashdot.

0
ответ дан 8 December 2019 в 03:54
поделиться

Это называют "хэш-коллизией" и лучшим способом избежать, чтобы он использовал сильную хеш-функцию. MD5 относительно легок искусственно создать сталкивающиеся файлы, как замечено здесь. Точно так же известно, что существует относительно эффективный способ для вычислений столкновения файлы SH1, хотя в этом случае "относительно эффективный" все еще берет hunreds часов, вычисляют время.

Обычно MD5 и SHA1 являются все еще дорогими для взламывания, но не невозможные. Если Вы действительно волнуетесь по поводу этого, используйте более сильную хеш-функцию, как SHA256.

Запись Вашей собственной не является на самом деле хорошая идея, если Вы не довольно опытный шифровальщик. большинство простых идей попробовали и существуют известные нападения на них.

Если Вы действительно хотите узнать больше о нем, взглянуть на Прикладную Криптографию Schneier.

1
ответ дан 8 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: