Jedna rzecz, o której tu nie wspomniano i zaskoczyła mnie. Klasy MessageDigest NIE są bezpieczne dla wątków. Jeśli będą używane przez różne wątki, po prostu utwórz nowy, zamiast próbować ich ponownie używać.
mjuarez
39
Używa wielu metod do mutowania swojego stanu wewnętrznego. Jak brak bezpieczeństwa wątków może być w ogóle zaskakujący?
Bombe,
90
@Bombe: dlaczego powinniśmy oczekiwać , aby wiedzieć o stanie wewnętrznym MessageDigest?
Dan Barowy
28
@DanBarowy dobrze, są mutowania go (czyli wywołanie metody, które nie zwracają wartości, ale powodują inne metody, aby powrócić różne wartości), więc dopóki nie zostanie udowodnione inaczej należy zawsze zakładać, że to nie jest bezpieczny wątku, aby to zrobić.
Bombe,
3
@Traubenfuchs MessageDigestpozwala na wprowadzanie danych w porcjach. Nie byłoby to możliwe przy użyciu metody statycznej. Chociaż możesz argumentować, że i tak powinni byli dodać jeden dla wygody, gdy możesz przekazać wszystkie dane naraz.
user253751,
690
MessageDigestKlasa może dostarczyć instancji MD5.
Podczas pracy z łańcuchami i klasami kryptograficznymi pamiętaj, aby zawsze określać kodowanie, w którym ma być reprezentowana bajt. Jeśli tylko użyjesz string.getBytes(), użyje domyślnej platformy. (Nie wszystkie platformy używają tych samych ustawień domyślnych)
Ten temat jest także przydatny, jeśli chcesz przekonwertować powstałe bajty na ciąg szesnastkowy.
weekendy
1
Jak zatem przekonwertować ten test na ciąg, abyśmy mogli wstawić go do mysql?
Humphrey,
2
Jeszcze lepiej, tam gdzie to możliwe yourString.getBytes(StandardCharsets.UTF_8). Zapobiega to obsłudze UnsupportedEncodingException.
Hummeling Engineering BV
267
Jeśli faktycznie chcesz otrzymać odpowiedź w postaci łańcucha, a nie tablicy bajtów, zawsze możesz zrobić coś takiego:
String plaintext ="your text here";MessageDigest m =MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());byte[] digest = m.digest();BigInteger bigInt =newBigInteger(1,digest);String hashtext = bigInt.toString(16);// Now we need to zero pad it if you actually want the full 32 chars.while(hashtext.length()<32){
hashtext ="0"+hashtext;}
@BalusC: Nieprawda, metoda BigInteger.toString zwróci pełną liczbę w określonej bazie. 0x0606 zostanie wydrukowane jako 606, tylko zera końcowe są pomijane,
Spidey
11
Drobny nitpick: m.reset () nie jest konieczny zaraz po wywołaniu getInstance. Bardziej drobne: „Twój tekst tutaj” wymaga podwójnych cudzysłowów.
David Leppik,
Począwszy od wersji Java 11, możesz używać hashtext = "0".repeat(32 - hashtext.length()) + hashtextzamiast niej while, więc redaktorzy nie będą dawać ostrzeżenia, że łączysz łańcuch w pętli.
tom
Zamiast m.update (plaintext.getBytes ()); Poleciłbym określenie kodowania. takich jak m.update (plaintext.getBytes („UTF-8”)); getBytes () nie gwarantuje kodowania i może różnić się w zależności od systemu, co może powodować różne wyniki MD5 między systemami dla tego samego ciągu.
user1819780
256
Możesz także przyjrzeć się klasie DigestUtils projektu kodeka apache commons , który zapewnia bardzo wygodne metody tworzenia skrótów MD5 lub SHA.
W szczególności metody zwracające „bezpieczne” zakodowane reprezentacje danych bajtowych w postaci łańcucha.
Rob
4
Jednak nie ma łatwego sposobu na umieszczenie klasy DigestUtils w projekcie bez dodania mnóstwa bibliotek lub przeniesienia klasy „na rękę”, co wymaga co najmniej dwóch dodatkowych klas.
iuiz
Nie można go również znaleźć w repozytoriach maven. Grrrr.
sparkyspider
5
Powinny być w centralnym repozytorium Mavena, chyba że wariuję: GroupID = commons-codec artifactId = commons-codec version = 1,5
Nick Spacek
160
Znajdź to:
publicString MD5(String md5){try{
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");byte[] array = md.digest(md5.getBytes());StringBuffer sb =newStringBuffer();for(int i =0; i < array.length;++i){
sb.append(Integer.toHexString((array[i]&0xFF)|0x100).substring(1,3));}return sb.toString();}catch(java.security.NoSuchAlgorithmException e){}returnnull;}
na poniższej stronie nie biorę za to uznania, ale jest to rozwiązanie, które działa! Dla mnie wiele innych kodów nie działało poprawnie, skończyło mi się na zera w haszu. Ten wydaje się być taki sam jak PHP. źródło: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093
Powinieneś określić kodowanie, które ma być użyte, w getBytes()przeciwnym razie twój kod uzyska inne wyniki na różnych platformach / ustawieniach użytkownika.
Paŭlo Ebermann
@ PaŭloEbermann wykonuje MessageDigest.getInstance („MD5”); niewystarczająco? Próbowałem dodać „MD5” w getBytes (), ale zwrócił błąd
Blaze Tama
2
@BlazeTama „MD5” nie jest kodowaniem, jest to algorytm podsumowania wiadomości (i nie taki, który powinien być używany w nowych aplikacjach). Kodowanie to para algorytmów, która przekształca bajty na ciągi i ciągi na bajty. Przykładem może być „UTF-8”, „US-ASCII”, „ISO-8859-1”, „UTF-16BE” i podobne. Użyj tego samego kodowania, co każda inna strona, która oblicza skrót tego ciągu, w przeciwnym razie otrzymasz inne wyniki.
Paŭlo Ebermann
6
Na przykład zestaw znaków ... (użyj UTF-8, który moim zdaniem jest najlepszy i najbardziej kompatybilny) ...byte[] array = md.digest(md5.getBytes(Charset.forName("UTF-8")));
Richard
Ponieważ nie jest to moje rozwiązanie i sam nie testowałem wszystkich scenariuszy, pozostawiam je bez zmian, chociaż myślę, że podanie kodowania itp. Jest prawdopodobnie dobrym pomysłem.
dac2009
88
Oto jak go używam:
finalMessageDigest messageDigest =MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));finalbyte[] resultByte = messageDigest.digest();finalString result =newString(Hex.encodeHex(resultByte));
gdzie Hex: org.apache.commons.codec.binary.Hexz projektu Apache Commons .
Jest to metoda, która zapewnia taką samą wartość zwracaną jak funkcja MySQL md5 (str). Wiele innych odpowiedzi zwróciło inne wartości.
rwitzel
1
Nie działa to poprawnie na Androidzie, ponieważ Android dołącza kodek commons 1.2, dla którego potrzebujesz tego obejścia: stackoverflow.com/a/9284092/2413303
EpicPandaForce
76
Uważam, że jest to najbardziej jasny i zwięzły sposób:
Świetny. Nie wpada w pułapkę wycinania zer wiodących.
Markus Pscheidt,
2
Uwaga: to nie będzie działać na Androidzie, jeśli używasz interfejsu API na poziomie <19, ale wystarczy zmienić drugą linię za pomocą md5.update (string.getBytes („UTF-8”)); To doda jeszcze jeden sprawdzony wyjątek do obsługi, ale ...
Fran Marzoa
34
Znalazłem to rozwiązanie, które jest o wiele czystsze pod względem odzyskiwania reprezentacji String z skrótu MD5.
import java.security.*;import java.math.*;publicclass MD5 {publicstaticvoid main(String args[])throwsException{String s="This is a test";MessageDigest m=MessageDigest.getInstance("MD5");
m.update(s.getBytes(),0,s.length());System.out.println("MD5: "+newBigInteger(1,m.digest()).toString(16));}}
Dlaczego ta odpowiedź -1, podczas gdy druga, krótsza i mniej opisowa odpowiedź ma +146?
Nilzor
4
Fajnie jest używać BigInteger, aby uzyskać wartość heksadecymalną +1
Dave.B
5
Właśnie dowiedziałem się, że w niektórych przypadkach generuje to tylko 31 znaków MD5 o długości, a nie 32, jak powinno być
kovica
3
@kovica to dlatego, że początkowe zera zostają obcięte, jeśli dobrze pamiętam. String.format("%032x", new BigInteger(1, hash)); To powinno rozwiązać ten problem. „hash” jest bajtem [] hash.
Heshan Perera
Ta odpowiedź zawiera błąd związany z typem zestawu znaków!
Widziałem tylko jeden wiersz, który nie korzysta z zewnętrznej biblioteki.
holmis83,
O ile się nie mylę, to zawsze zwraca wielkie litery, które nie będą się zgadzały z md5 wykonanymi bez użycia heksa. Nie jestem nawet pewien, czy to prawdziwy md5
walshie4,
2
@ walshie4 nie ma MD5 bez heksa (patrz ietf.org/rfc/rfc1321.txt ), aby uzyskać małe litery wystarczy dodać .toLower (). Porównaj wyniki z przykładami np. En.wikipedia.org/wiki/MD5, wtedy będziesz mieć większą szansę, aby uwierzyć, że kod biblioteki JavaScript jest poprawny.
układarka
28
Mam Class (Hash) do konwersji zwykłego tekstu w skrócie w formatach: md5 lub sha1, simillar, który działa w php ( md5 , sha1 ):
publicclassHash{/**
*
* @param txt, text in plain format
* @param hashType MD5 OR SHA1
* @return hash in hashType
*/publicstaticString getHash(String txt,String hashType){try{
java.security.MessageDigest md = java.security.MessageDigest.getInstance(hashType);byte[] array = md.digest(txt.getBytes());StringBuffer sb =newStringBuffer();for(int i =0; i < array.length;++i){
sb.append(Integer.toHexString((array[i]&0xFF)|0x100).substring(1,3));}return sb.toString();}catch(java.security.NoSuchAlgorithmException e){//error action}returnnull;}publicstaticString md5(String txt){returnHash.getHash(txt,"MD5");}publicstaticString sha1(String txt){returnHash.getHash(txt,"SHA1");}}
Odpowiedź Bombe jest poprawna, jednak zauważ, że o ile nie musisz bezwzględnie korzystać z MD5 (np. Zmuszonego do współpracy), lepszym wyborem jest SHA1, ponieważ MD5 ma słabości do długotrwałego użytkowania.
Powinienem dodać, że SHA1 ma również luki teoretyczne, ale nie tak poważne. Obecny stan techniki w dziedzinie mieszania polega na tym, że istnieje wiele kandydujących funkcji mieszających zastępujących, ale żadna z nich nie stała się jeszcze standardową najlepszą praktyką zastępującą SHA1. Tak więc, w zależności od potrzeb, dobrze jest skonfigurować algorytm skrótu, aby można go było zmienić w przyszłości.
Czy możesz wskazać mi zasoby, w których mogę przeczytać o względnych zaletach i słabościach każdego z nich?
Akshay
Prawdopodobnie najlepsze, co możesz teraz zrobić, to użyć SHA1 i być gotowym do zastąpienia go w przyszłości. Możesz użyć nowszych funkcji, ale nie były one jeszcze przedmiotem wielu badań. Możesz śledzić zasoby bezpieczeństwa online, aby dowiedzieć się, kiedy to się zmienia - na przykład blog Bruce'a Schneiera.
frankodwyer
7
SHA1 to przesada, chyba że potrzebujesz kryptograficznie bezpiecznego skrótu, tzn. Nie chcesz, aby skrót pomógł w odtworzeniu oryginalnej wiadomości, ani nie chcesz, aby sprytny napastnik utworzył inną wiadomość, która pasuje do skrótu. Jeśli oryginał nie jest tajemnicą, a skrót nie jest używany do bezpieczeństwa, MD5 jest szybki i łatwy. Na przykład Google Web Toolkit używa skrótów MD5 w adresach URL JavaScript (np. Foo.js? Hash = 12345).
Jest to solidna, samodzielna biblioteka z minimalnymi zależnościami. Dobry towar.
Ajax
Uważam to za bardzo przydatne. Plik 4,57 GB zajął 15357 ms, natomiast implementacja wbudowana Java zajęła 19094 ms.
bkrish
11
Nie wiem, czy jest to istotne dla każdego, kto to czyta, ale właśnie miałem problem, który chciałem
pobierz plik z podanego adresu URL i
porównaj jego MD5 ze znaną wartością.
Chciałem to zrobić tylko z klasami JRE (bez Apache Commons lub podobnego). Szybkie wyszukiwanie w Internecie nie pokazało mi fragmentów przykładowego kodu wykonujących oba jednocześnie, tylko każde zadanie osobno. Ponieważ wymaga to dwukrotnego przeczytania tego samego pliku, pomyślałem, że warto poświęcić chwilę na napisanie kodu, który ujednolica oba zadania, obliczając sumę kontrolną w locie podczas pobierania pliku. Oto mój wynik (przepraszam, jeśli nie jest to idealna Java, ale myślę, że i tak rozumiesz):
Och, BTW, zanim ktokolwiek, oprócz mnie, zauważy, jak zła jest moja znajomość JRE: właśnie odkryłem DigestInputStream i DigestOutputStream . Zamierzam edytować moje oryginalne rozwiązanie, aby odzwierciedlić to, czego się właśnie nauczyłem.
kriegaex
6
Spójrz na następujący link, w przykładzie otrzymano skrót MD5 dostarczonego obrazu:
skrót MD5 obrazu
Na ile warto, natknąłem się na to, ponieważ chcę zsyntetyzować identyfikatory GUID z naturalnego klucza dla programu, który zainstaluje komponenty COM; Chcę syhthesize, aby nie zarządzać cyklem życia GUID. Użyję MD5, a następnie klasy UUID, aby uzyskać z niego ciąg znaków. (http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439 podnosi ten problem).
W każdym razie java.util.UUID może uzyskać ładny ciąg z bajtów MD5.
w rzeczywistości akceptuje nie tylko tablicę bajtów MD5 (rozmiar == 16). Możesz przekazać tablicę bajtów o dowolnej długości. Zostanie przekonwertowany na tablicę bajtów MD5 za pomocą MD5 MessageDigest(patrz kod źródłowy nameUUIDFromBytes () )
W przeciwieństwie do PHP, w którym można zrobić skrót MD5 tekstu, po prostu wywołując funkcję md5, tj. md5($text)W Javie było to trochę skomplikowane. Zwykle implementowałem go, wywołując funkcję, która zwraca tekst skrótu md5. Oto jak to zaimplementowałem. Najpierw utwórz funkcję o nazwie md5hashingwewnątrz głównej klasy, jak podano poniżej.
publicstaticString md5hashing(String text){String hashtext =null;try{String plaintext = text;MessageDigest m =MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());byte[] digest = m.digest();BigInteger bigInt =newBigInteger(1,digest);
hashtext = bigInt.toString(16);// Now we need to zero pad it if you actually want the full 32 chars.while(hashtext.length()<32){
hashtext ="0"+hashtext;}}catch(Exception e1){// TODO: handle exceptionJOptionPane.showMessageDialog(null,e1.getClass().getName()+": "+ e1.getMessage());}return hashtext;}
Teraz wywoływaj funkcję, ilekroć potrzebujesz, jak podano poniżej.
String text = textFieldName.getText();String pass = md5hashing(text);
Tutaj możesz zobaczyć, że hashtext jest dołączony do zera, aby dopasować go do haszowania md5 w PHP.
MD5 jest całkowicie w porządku, jeśli nie potrzebujesz najlepszego bezpieczeństwa, a jeśli robisz coś takiego, jak sprawdzanie integralności pliku, bezpieczeństwo nie jest brane pod uwagę. W takim przypadku możesz rozważyć coś prostszego i szybszego, na przykład Adler32, który jest również obsługiwany przez biblioteki Java.
Co sprawia, że uważasz, że integralność pliku nie jest problemem bezpieczeństwa?
Jeremy Huiskamp
5
ten daje dokładny md5, jaki otrzymujesz z funkcji md5 mysql lub funkcji md5 php itp. To jest to, którego używam (możesz zmienić zgodnie z własnymi potrzebami)
Jest to prawdopodobnie najgorsze rozwiązanie, ponieważ usuwa wiodące zera.
Jannick,
4
import java.security.MessageDigest
val digest =MessageDigest.getInstance("MD5")//Quick MD5 of text
val text ="MD5 this text!"
val md5hash1 = digest.digest(text.getBytes).map("%02x".format(_)).mkString
//MD5 of text with updates
digest.update("MD5 ".getBytes())
digest.update("this ".getBytes())
digest.update("text!".getBytes())
val md5hash2 = digest.digest().map(0xFF& _).map("%02x".format(_)).mkString
//Output
println(md5hash1 +" should be the same as "+ md5hash2)
Możesz wygenerować skrót MD5 dla danego tekstu, korzystając z metod w MessageDigestklasie w java.securitypakiecie. Poniżej znajduje się pełny fragment kodu,
Dane wyjściowe z funkcji MD5 to 128-bitowy skrót reprezentowany przez 32 liczby szesnastkowe.
Jeśli używasz bazy danych takiej jak MySQL, możesz to zrobić również w prostszy sposób. Zapytanie Select MD5(“text here”)zwróci skrót MD5 tekstu w nawiasie.
Odpowiedzi:
Potrzebujesz
java.security.MessageDigest
.Zadzwoń,
MessageDigest.getInstance("MD5")
aby uzyskać instancję MD5MessageDigest
której możesz użyć.Oblicz skrót, wykonując jedną z następujących czynności:
byte[]
i oblicz wartość skrótu w jednej operacji za pomocąmd.digest(bytes)
.MessageDigest
jednąbyte[]
porcję, dzwoniącmd.update(bytes)
. Po zakończeniu dodawania bajtów wejściowych obliczyć skrót za pomocąmd.digest()
.byte[]
Zwrócony przezmd.digest()
to hash MD5.źródło
MessageDigest
pozwala na wprowadzanie danych w porcjach. Nie byłoby to możliwe przy użyciu metody statycznej. Chociaż możesz argumentować, że i tak powinni byli dodać jeden dla wygody, gdy możesz przekazać wszystkie dane naraz.MessageDigest
Klasa może dostarczyć instancji MD5.Podczas pracy z łańcuchami i klasami kryptograficznymi pamiętaj, aby zawsze określać kodowanie, w którym ma być reprezentowana bajt. Jeśli tylko użyjesz
string.getBytes()
, użyje domyślnej platformy. (Nie wszystkie platformy używają tych samych ustawień domyślnych)Jeśli masz dużo danych, spójrz na
.update(byte[])
metodę, którą można wywoływać wielokrotnie. Następnie zadzwoń,.digest()
aby uzyskać wynikowy skrót.źródło
yourString.getBytes(StandardCharsets.UTF_8)
. Zapobiega to obsłudzeUnsupportedEncodingException
.Jeśli faktycznie chcesz otrzymać odpowiedź w postaci łańcucha, a nie tablicy bajtów, zawsze możesz zrobić coś takiego:
źródło
hashtext = "0".repeat(32 - hashtext.length()) + hashtext
zamiast niejwhile
, więc redaktorzy nie będą dawać ostrzeżenia, że łączysz łańcuch w pętli.Możesz także przyjrzeć się klasie DigestUtils projektu kodeka apache commons , który zapewnia bardzo wygodne metody tworzenia skrótów MD5 lub SHA.
źródło
Znajdź to:
na poniższej stronie nie biorę za to uznania, ale jest to rozwiązanie, które działa! Dla mnie wiele innych kodów nie działało poprawnie, skończyło mi się na zera w haszu. Ten wydaje się być taki sam jak PHP. źródło: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093
źródło
getBytes()
przeciwnym razie twój kod uzyska inne wyniki na różnych platformach / ustawieniach użytkownika.byte[] array = md.digest(md5.getBytes(Charset.forName("UTF-8")));
Oto jak go używam:
gdzie Hex:
org.apache.commons.codec.binary.Hex
z projektu Apache Commons .źródło
String result = Hex.encodeHexString(resultByte);
Właśnie pobrałem plik commons-codec.jar i uzyskałem doskonały php, taki jak md5. Oto instrukcja .
Po prostu zaimportuj go do swojego projektu i użyj
i masz to.
źródło
Uważam, że jest to najbardziej jasny i zwięzły sposób:
źródło
Znalazłem to rozwiązanie, które jest o wiele czystsze pod względem odzyskiwania reprezentacji String z skrótu MD5.
Kod został wyciągnięty stąd .
źródło
String.format("%032x", new BigInteger(1, hash));
To powinno rozwiązać ten problem. „hash” jest bajtem [] hash.Inną opcją jest użycie metod mieszania guawy :
Przydatne, jeśli już używasz Guawy (a jeśli nie, prawdopodobnie powinieneś).
źródło
Hashing.md5().hashString("my string").asBytes();
Kolejne wdrożenie:
źródło
Mam Class (Hash) do konwersji zwykłego tekstu w skrócie w formatach: md5 lub sha1, simillar, który działa w php ( md5 , sha1 ):
Testowanie z JUnit i PHP
Skrypt PHP:
Wyjściowy skrypt PHP:
Przy użyciu przykładu i testowania z JUnit:
Kod w GitHub
źródło
Nie trzeba tego komplikować.
DigestUtils działa dobrze i zapewnia wygodę podczas pracy z
md5
hashami.lub
Możesz użyć dowolnej innej metody szyfrowania, takiej jak
sha
lubmd
.źródło
Moja niezbyt odkrywcza odpowiedź:
źródło
String.format("%1$032X", big)
mieć format wielkich literNa wiosnę jest też
DigestUtils
klasa :http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/util/DigestUtils.html
Ta klasa zawiera metodę
md5DigestAsHex()
wykonującą zadanie.źródło
Możesz spróbować śledzić. Zobacz szczegóły i pobierz kody tutaj: http://jkssweetlife.com/java-hashgenerator-md5-sha-1/
źródło
Odpowiedź Bombe jest poprawna, jednak zauważ, że o ile nie musisz bezwzględnie korzystać z MD5 (np. Zmuszonego do współpracy), lepszym wyborem jest SHA1, ponieważ MD5 ma słabości do długotrwałego użytkowania.
Powinienem dodać, że SHA1 ma również luki teoretyczne, ale nie tak poważne. Obecny stan techniki w dziedzinie mieszania polega na tym, że istnieje wiele kandydujących funkcji mieszających zastępujących, ale żadna z nich nie stała się jeszcze standardową najlepszą praktyką zastępującą SHA1. Tak więc, w zależności od potrzeb, dobrze jest skonfigurować algorytm skrótu, aby można go było zmienić w przyszłości.
źródło
Kolejna implementacja: szybka implementacja MD5 w Javie
źródło
Nie wiem, czy jest to istotne dla każdego, kto to czyta, ale właśnie miałem problem, który chciałem
Chciałem to zrobić tylko z klasami JRE (bez Apache Commons lub podobnego). Szybkie wyszukiwanie w Internecie nie pokazało mi fragmentów przykładowego kodu wykonujących oba jednocześnie, tylko każde zadanie osobno. Ponieważ wymaga to dwukrotnego przeczytania tego samego pliku, pomyślałem, że warto poświęcić chwilę na napisanie kodu, który ujednolica oba zadania, obliczając sumę kontrolną w locie podczas pobierania pliku. Oto mój wynik (przepraszam, jeśli nie jest to idealna Java, ale myślę, że i tak rozumiesz):
źródło
Spójrz na następujący link, w przykładzie otrzymano skrót MD5 dostarczonego obrazu: skrót MD5 obrazu
źródło
Na ile warto, natknąłem się na to, ponieważ chcę zsyntetyzować identyfikatory GUID z naturalnego klucza dla programu, który zainstaluje komponenty COM; Chcę syhthesize, aby nie zarządzać cyklem życia GUID. Użyję MD5, a następnie klasy UUID, aby uzyskać z niego ciąg znaków. (http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439 podnosi ten problem).
W każdym razie java.util.UUID może uzyskać ładny ciąg z bajtów MD5.
źródło
MessageDigest
(patrz kod źródłowy nameUUIDFromBytes () )źródło
W przeciwieństwie do PHP, w którym można zrobić skrót MD5 tekstu, po prostu wywołując funkcję md5, tj.
md5($text)
W Javie było to trochę skomplikowane. Zwykle implementowałem go, wywołując funkcję, która zwraca tekst skrótu md5. Oto jak to zaimplementowałem. Najpierw utwórz funkcję o nazwiemd5hashing
wewnątrz głównej klasy, jak podano poniżej.Teraz wywoływaj funkcję, ilekroć potrzebujesz, jak podano poniżej.
Tutaj możesz zobaczyć, że hashtext jest dołączony do zera, aby dopasować go do haszowania md5 w PHP.
źródło
MD5 jest całkowicie w porządku, jeśli nie potrzebujesz najlepszego bezpieczeństwa, a jeśli robisz coś takiego, jak sprawdzanie integralności pliku, bezpieczeństwo nie jest brane pod uwagę. W takim przypadku możesz rozważyć coś prostszego i szybszego, na przykład Adler32, który jest również obsługiwany przez biblioteki Java.
źródło
ten daje dokładny md5, jaki otrzymujesz z funkcji md5 mysql lub funkcji md5 php itp. To jest to, którego używam (możesz zmienić zgodnie z własnymi potrzebami)
źródło
Spróbuj tego:
źródło
źródło
Możesz wygenerować skrót MD5 dla danego tekstu, korzystając z metod w
MessageDigest
klasie wjava.security
pakiecie. Poniżej znajduje się pełny fragment kodu,Dane wyjściowe z funkcji MD5 to 128-bitowy skrót reprezentowany przez 32 liczby szesnastkowe.
Jeśli używasz bazy danych takiej jak MySQL, możesz to zrobić również w prostszy sposób. Zapytanie
Select MD5(“text here”)
zwróci skrót MD5 tekstu w nawiasie.źródło
Oto po co tu przyszedłem - przydatna funkcja scala, która zwraca ciąg skrótu MD5:
źródło
Na ten temat znajduje się artykuł na temat Codingkit. Sprawdź: http://codingkit.com/a/JAVA/2013/1020/2216.html
źródło