В Java я хотел бы создать открытый и закрытый ключ на основе строки в моем приложении.Генерировать открытый и закрытый ключ с использованием строки
Я не пойду на безопасность, я собираюсь «Могу ли я сгенерировать тот же общедоступный и закрытый ключ, используя эту строку».
Как бы я это сделал?
Я смотрел на этих методах:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
Но я хочу, чтобы засеять генератор ключей паров с моей строкой, которая в идеале получить хеширована эти алгоритмы. KeyGen принимает только объект SecureRandom
. Я хочу получить ту же результирующую пару ключей, когда я передаю эту строку.
«Считается неосуществимым, чтобы найти две строки с одним и тем же хэш-кодом» - это справедливо только для криптографической хеш-функции, которой не является метод Java String.hashCode. Также нет гарантии, что 'hashCode' вернет одно и то же значение для той же строки в разных прогонах программы; он должен быть согласован только в одном исполнении. Криптографическая хеш-функция, такая как SHA-256, здесь намного лучше, чем хэш-код Java. – Wyzard
Спасибо! Я отредактировал свой ответ, чтобы ответить на ваши комментарии и проблему кодировок символов, влияющих на хэш. –
Я бы даже не сказал, что «очень маловероятно» найти хэш-столкновение с методом «hashCode» Java. Читайте о [атаке на день рождения] (https://en.wikipedia.org/wiki/Birthday_attack): поскольку 'hashCode' производит 32-битный результат, вам нужно всего около 77 000 (случайных) строк, чтобы иметь 50% вероятность того, что два из них будут иметь один и тот же хэш-код. А алгоритмы, используемые для реализации 'hashCode', не предназначены для противодействия [preimage attack] (https://en.wikipedia.org/wiki/Preimage_attack), поэтому для кого-то нетрудно преднамеренно * сделать * строку с выбранный хэш-код. – Wyzard