2013-08-20 4 views
0

У меня есть строка, которую я хотел бы использовать с использованием SHA-256. Я немного посмотрел в Интернете и, к моему большому удивлению, не могу найти простой способ сделать это. Я знаю класс MessageDigest, который, кажется, предоставляет все, что мне нужно, кроме одного: метод вроде этого: String hash256(String txt) Я также знаю, что есть способы сделать это (например: here), но я неохотно пишу больше чем одна строка для чего-то, вероятно, уже существующего. Вы, ребята, знаете, существует ли такая вещь?Есть ли простой способ для хэша в Java?

EDIT: похоже, я был недостаточно ясен. Есть ли существующий метод, эквивалентный следующему коду в JDK?

public String hash256(String txt){ 
    MessageDigest sha = MessageDigest.getInstance("SHA-256"); 
    sha.update(txt.getBytes()); 
    byte[] digest = sha.digest(); 
    return bytesToString(digest); 
} 
+1

Кстати, этого дура не было сложно найти: google «java SHA256», и это лучший хит. Не уверен, что вы имели в виду под «Я искал в Интернете»:/ – Bohemian

+0

@Bohemian Как я уже сказал, я хочу знать, есть ли метод jdk, который может использовать String для String. Представленные вами примеры дают мне байты (я знаю, как их обрабатывать, но я не хочу перекодировать что-то уже существующее). – fxm

ответ

3

Вы можете использовать DigestUtils.sha256() из библиотеки Apache Commons.

+0

Нет ли эквивалента JDK? – fxm

+0

Вы можете увидеть эквивалент jdk в ответе Dodd10x. Вы можете также создать класс FXMUtils, чтобы написать способ, который вы хотите. – Marcelo

+0

Не совсем то, что я хочу, но я думаю, это лучшее, что я могу получить, спасибо. – fxm

3
MessageDigest md = MessageDigest.getInstance("SHA-256"); 
md.update(stringAsbytes); 
stringAsBytes = md.digest(); 

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

+0

Пункт моего вопроса: существует ли существующий метод, выполняющий все (а не только хеширование в байты)? – fxm

+2

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