Kaip generuoti MD5 maišą?

Ar yra kokių nors būdų generuoti eilutę MD5 maišą „Java“?

917
06 янв. Akshay nustatė 06 sausį 2009-01-06 12:45 '09, 12:45, 2009-01-06 12:45
@ 32 atsakymai
  • 1
  • 2

java.security.MessageDigest jūsų draugas. Skambinkite „ getInstance("MD5") kad gautumėte MD5 pranešimo suvestinę, kurią galite naudoti.

557
06 янв. Atsakymas duotas Bombe 06 sausis 2009-01-06 12:47 '09, 12:47, 2009-01-06 12:47

MessageDigest klasė gali suteikti jums MD5 MessageDigest pavyzdį.

Dirbdami su stygomis ir kriptografinėmis klasėmis, būtinai visada nurodykite kodavimą, kuriame norite įtraukti baito vaizdą. Jei naudosite tik string.getBytes() , ji naudos numatytąjį platformą. (Ne visose platformose naudojamos tos pačios numatytosios vertės)

 import java.security.*; .. byte[] bytesOfMessage = yourString.getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] thedigest = md.digest(bytesOfMessage); 

Jei turite daug duomenų, peržiūrėkite .update(byte[]) metodą, kurį galite skambinti dar kartą. Tada skambinkite .digest() kad gautumėte gautą maišą.

655
06 янв. atsakymas, kurį pateikė koregan Jan 06 2009-01-06 12:58 '09, 12:58 am. 2009-01-06 12:58

Taip pat galite peržiūrėti „ DigestUtils“ klasės „apache commons“ kodeką , kuriame pateikiami labai patogūs MD5 arba SHA apdorojimo būdai.

252
06 янв. atsakymas duotas lutzh 06 Sau 2009-01-06 17:51 '09, 17:51, 2009-01-06 17:51

Jei tikrai norite, kad atsakymas būtų grąžintas kaip eilutė, o ne baitų masyvas, visada galite tai padaryti:

 String plaintext = "your text here"; MessageDigest m = MessageDigest.getInstance("MD5"); m.reset(); m.update(plaintext.getBytes()); byte[] digest = m.digest(); BigInteger bigInt = new BigInteger(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; } 
249
07 янв. atsakymą pateikė user49913 07 jan. 2009-01-07 22:20 '09 at 10:20 AM 2009-01-07 22:20

Rasta:

 public String MD5(String md5) { try { java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); byte[] array = md.digest(md5.getBytes()); StringBuffer sb = new StringBuffer(); 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) { } return null; } 

Žemiau esančioje svetainėje aš neatsakau už tai, bet tai yra sprendimas, kuris veikia! Man, daug kitų kodų neveikė tinkamai, aš baigiau trūkstamus 0. Tai panašu į PHP. Šaltinis: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093

151
04 июля '11 в 0:11 2011-07-04 00:11 atsakymas pateikiamas dac2009 04 liepa '11, 0:11 2011-07-04 00:11

Štai kaip tai naudoti:

 final MessageDigest messageDigest = MessageDigest.getInstance("MD5"); messageDigest.reset(); messageDigest.update(string.getBytes(Charset.forName("UTF8"))); final byte[] resultByte = messageDigest.digest(); final String result = new String(Hex.encodeHex(resultByte)); 

kur Hex: org.apache.commons.codec.binary.Hex„Apache Commons“ projekto .

84
01 окт. atsakymas pateikiamas adranale 01 okt. 2010-10-01 13:28 '10, 13:28, 2010-10-01 13:28

Aš ką tik įkėliau commons-codec.jar ir gavau tobulą php, pavyzdžiui, md5. Čia yra vadovas .

Tiesiog importuokite jį į savo projektą ir naudokite

 String Url = "your_url"; System.out.println( DigestUtils.md5Hex( Url ) ); 

ir ten jūs turite.

80
31 июля '11 в 1:51 2011-07-31 01:51 atsakymą davė Eugenijus , liepos 31 d. 11, 01:51 2011-07-31 01:51

Radau tai labiausiai suprantamu ir glaustu būdu:

 MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(StandardCharsets.UTF_8.encode(string)); return String.format("%032x", new BigInteger(1, md5.digest())); 
64
08 мая '15 в 11:16 2015-05-08 11:16 atsakymas duotas rednoah Geg 08 '15 , 11:16 2015-05-08 11:16

Radau šį sprendimą, kuris yra daug paprastesnis kalbant apie tai, kaip gauti eilutę iš MD5 maišos.

 import java.security.*; import java.math.*; public class MD5 { public static void main(String args[]) throws Exception{ String s="This is a test"; MessageDigest m=MessageDigest.getInstance("MD5"); m.update(s.getBytes(),0,s.length()); System.out.println("MD5: "+new BigInteger(1,m.digest()).toString(16)); } } 

Kodas buvo išgautas iš čia .

32
10 мая '12 в 12:18 2012-05-10 12:18 atsakymą pateikė Heshan Perera gegužės 10 d., 12 val. 12:18 2012-05-10 12:18

Kitas variantas yra naudoti Gvajavos kankinimo metodus:

 Hasher hasher = Hashing.md5().newHasher(); hasher.putString("my string"); byte[] md5 = hasher.hash().asBytes(); 

Patogiai, jei jau naudojate Guava (jei taip nėra, turbūt turėtumėte būti).

31
12 нояб. Atsakymą pateikė andrewrjones lapkričio 12 d 2012-11-12 19:50 '12 at 7:50 pm 2012-11-12 19:50

Kitas įgyvendinimas:

 import javax.xml.bind.DatatypeConverter; String hash = DatatypeConverter.printHexBinary( MessageDigest.getInstance("MD5").digest("SOMESTRING".getBytes("UTF-8"))); 
30
24 апр. atsakymas pateikiamas 24 d. 2014-04-24 18:26 '14, 18:26, 2014-04-24 18:26

Turiu klasę (maišą) paprastam tekstui konvertuoti į maišą šiais formatais: md5 arba sha1, lygiagreti, ką php funkcijos ( md5 , sha1 ):

 public class Hash {  public static String getHash(String txt, String hashType) { try { java.security.MessageDigest md = java.security.MessageDigest.getInstance(hashType); byte[] array = md.digest(txt.getBytes()); StringBuffer sb = new StringBuffer(); 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 } return null; } public static String md5(String txt) { return Hash.getHash(txt, "MD5"); } public static String sha1(String txt) { return Hash.getHash(txt, "SHA1"); } } 

Testavimas su JUnit ir PHP

PHP scenarijus:

 <?php echo 'MD5 :' . md5('Hello World') . "\n"; echo 'SHA1:' . sha1('Hello World') . "\n"; 

PHP scenarijaus išvestis:

 MD5 :b10a8db164e0754105b7a99be72e3fe5 SHA1:0a4d55a8d778e5022fab701977c5d840bbc486d0 

Pavyzdžių ir bandymų naudojimas su JUnit:

  public class HashTest { @Test public void test() { String txt = "Hello World"; assertEquals("b10a8db164e0754105b7a99be72e3fe5", Hash.md5(txt)); assertEquals("0a4d55a8d778e5022fab701977c5d840bbc486d0", Hash.sha1(txt)); } } 

GitHub kodas

https://github.com/fitorec/java-hashes

27
11 авг. atsakymą pateikė fitorec 11 rug . 2014-08-11 22:43 '14, 10:43 val. 2014-08-11 22:43

Mano ne labai atskleidžiantis atsakymas:

 private String md5(String s) { try { MessageDigest m = MessageDigest.getInstance("MD5"); m.update(s.getBytes(), 0, s.length()); BigInteger i = new BigInteger(1,m.digest()); return String.format("%1$032x", i); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } 
22
17 апр. atsakymas pateikiamas marioosh 17 Bal 2012-04-17 20:19 '12 at 8:19 PM 2012-04-17 20:19

Nereikia to padaryti pernelyg sudėtinga. „DigestUtils“ puikiai veikia ir leidžia patogiai dirbti su „md5 hashes“.

 DigestUtils.md5Hex(_hash); 

arba

 DigestUtils.md5(_hash); 

Arba galite naudoti kitus šifravimo metodus, pvz., „Sha“ arba „md“.

20
31 окт. Atsakymą pateikė Fatih Karatana spalio 31 d. 2012-10-31 16:02 '12 4:02 pm 2012-10-31 16:02

„Bombe“ atsakymas yra teisingas, tačiau atkreipkite dėmesį, kad jei jums nereikia naudoti MD5 (pvz., Priversti jus bendrauti), SHA1 yra geriausias pasirinkimas, nes MD5 turi silpnų vietų ilgalaikiam naudojimui.

Turiu pridurti, kad SHA1 taip pat turi teorinių pažeidžiamumų, bet ne taip sunkiai. Dabartinė maišymo padėtis yra ta, kad yra keletas alternatyvių pakaitinių maišos funkcijų, tačiau nė vienas iš jų dar nėra tapęs standartine geriausia praktika pakeičiant SHA1. Taigi, priklausomai nuo jūsų poreikių, jums bus naudinga pritaikyti savo maišymo algoritmą, kad jį būtų galima pakeisti ateityje.

16
06 янв. atsakymas, kurį pateikė frankodwyer, sausio 6 d 2009-01-06 13:07 '09, 13:07 2009-01-06 13:07

Pavasarį yra „ DigestUtils klasė:

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/util/DigestUtils.html

Šioje klasėje yra md5DigestAsHex() metodas, kuris atlieka užduotį.

15
13 сент. Raul Luna atsakymas, pateiktas rugsėjo 13 d 2012-09-13 12:46 '12 12:46 2012-09-13 12:46

Galite išbandyti šiuos veiksmus. Informacija ir kodai atsisiųsti, žr. Čia: http://jkssweetlife.com/java-hashgenerator-md5-sha-1/

 import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Example { public static void main(String[] args) throws Exception { final String inputString = "Hello MD5"; System.out.println("MD5 hex for '" + inputString + "' :"); System.out.println(getMD5Hex(inputString)); } public static String getMD5Hex(final String inputString) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(inputString.getBytes()); byte[] digest = md.digest(); return convertByteToHex(digest); } private static String convertByteToHex(byte[] byteData) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < byteData.length; i++) { sb.append(Integer.toString((byteData[i]  0xff) + 0x100, 16).substring(1)); } return sb.toString(); } } 
14
12 марта '14 в 6:02 2014-03-12 06:02 atsakymas pateikiamas „ Ylu“ kovo 12, 14 d., 6:02 2014-03-12 06:02

Kitas įgyvendinimas: greitas MD5 diegimas „Java“

 String hash = MD5.asHex(MD5.getHash(new File(filename))); 
10
16 марта '11 в 16:16 2011-03-16 16:16 atsakymas pateikiamas Lukaszui R. kovo 16 d., 16:16 2011-03-16 16:16

Nežinau, ar tai tinka tiems, kurie tai skaito, bet turėjau problemos, kurią norėjau

  • Atsisiųskite failą iš nurodyto URL ir
  • Palyginkite savo MD5 su žinoma verte.

Norėjau tai padaryti tik su JRE klasėmis (be Apache Commons ar panašių). Greita žiniatinklio paieška nerodė kodų fragmentų, kurie įvykdyti abu tuo pačiu metu, tik kiekviena užduotis yra atskira. Kadangi tai reikalauja skaityti tą patį failą du kartus, aš nusprendžiau parašyti kodą, kuris apjungia abi užduotis, skaičiuodamas kontrolinę sumą, kai įkeliate failą. Tai yra mano rezultatas (atsiprašau, jei tai nėra tobulas „Java“, bet manau, kad vis tiek gaunate idėją):

 import java.io.FileOutputStream; import java.io.IOException; import java.math.BigInteger; import java.net.URL; import java.nio.ByteBuffer; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; import java.security.DigestOutputStream; // new import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; void downloadFile(String fromURL, String toFile, BigInteger md5) throws IOException, NoSuchAlgorithmException { ReadableByteChannel in = Channels.newChannel(new URL(fromURL).openStream()); MessageDigest md5Digest = MessageDigest.getInstance("MD5"); WritableByteChannel out = Channels.newChannel( //new FileOutputStream(toFile)); // old new DigestOutputStream(new FileOutputStream(toFile), md5Digest)); // new ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024); // 1 MB while (in.read(buffer) != -1) { buffer.flip(); //md5Digest.update(buffer.asReadOnlyBuffer()); // old out.write(buffer); buffer.clear(); } BigInteger md5Actual = new BigInteger(1, md5Digest.digest()); if (! md5Actual.equals(md5)) throw new RuntimeException( "MD5 mismatch for file " + toFile + ": expected " + md5.toString(16) + ", got " + md5Actual.toString(16) ); } 
9
25 июня '12 в 15:44 2012-06-25 15:44 atsakymą pateikė kriegaex birželio 25 d. 12 val. 15:44 2012-06-25 15:44

Už tai, ką kainuoja, suklupau dėl to, nes noriu sintezuoti GUID iš natūralaus rakto programai, kuri įdiegs COM komponentus; Aš noriu, kad shthesize nevaldytų GUID gyvavimo ciklo. Aš naudosiu MD5 ir tada naudosiu UUID klasę, kad gautumėte eilutę iš jo. (http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439 kelia šią problemą).

Bet kokiu atveju, java.util.UUID gali gauti jums gražią eilutę iš MD5 baitų.

 return UUID.nameUUIDFromBytes(md5Bytes).toString(); 
6
26 окт. Mihai Danila atsakymas spalio 26 d. 2012-10-26 20:01 '12 8:01 pm 2012-10-26 20:01

Pažvelkite į šią nuorodą: Pavyzdys gauna pateikto atvaizdo MD5 maišą : vaizdo MD5 maišos.

6
07 янв. Atsakyti Thomasui sausio 7 d 2009-01-07 06:24 '09, 6:24 am. 2009-01-07 06:24

MD5 atlieka puikų darbą, jei jums nereikia geresnio saugumo, ir jei darote kažką panašaus į failo vientisumo patikrinimą, tuomet saugumas nelaikomas. Tokiu atveju galite apsvarstyti kažką paprastesnį ir greitesnį, pavyzdžiui, „Adler32“, kurį palaiko „Java“ bibliotekos.

5
08 янв. Atsakymą davė Mike sausio 08 d 2009-01-08 11:42 '09 11:42 2009-01-08 11:42

pabandykite atlikti šiuos veiksmus:

 public static String getHashMD5(String string) { try { MessageDigest md = MessageDigest.getInstance("MD5"); BigInteger bi = new BigInteger(1, md.digest(string.getBytes())); return bi.toString(16); } catch (NoSuchAlgorithmException ex) { Logger.getLogger(MD5Utils.class .getName()).log(Level.SEVERE, null, ex); return ""; } } 
4
13 янв. Marcelo Lopesas atsakė sausio 13 d. 2015-01-13 03:06 '15 at 3:06 2015-01-13 03:06
 import java.security.*; import javax.xml.bind.*; byte[] bytesOfMessage = yourString.getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytesOfDigest = md.digest(bytesOfMessage); String digest = DatatypeConverter.printHexBinary(bytesOfDigest).toLowerCase(); 
4
29 янв. Giancarlo Romeo atsakė į 29 Jan 2018-01-29 21:12 '18, 9:12 pm 2018-01-29 21:12
 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) 
3
04 янв. HimalayanCoder atsakymas yra 04 Jan 2017-01-04 13:26 '17, 13:26 pm 2017-01-04 13:26

tai suteikia tikslią md5, kaip jūs gaunate iš mysql md5 funkcijos arba php md5 ir tt Tai yra tas, kurį naudoju (galite keisti pagal savo poreikius)

 public static String md5( String input ) { try { java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); byte[] array = md.digest(input.getBytes( "UTF-8" )); StringBuffer sb = new StringBuffer(); for (int i = 0; i < array.length; i++) { sb.append( String.format( "%02x", array[i])); } return sb.toString(); } catch ( NoSuchAlgorithmException | UnsupportedEncodingException e) { return null; } } 
3
18 апр. atsakymas pateikiamas Aurangzeb 18 balandžio. 2016-04-18 18:00 16 val. 2016-04-18 18:00

Štai ką aš padariau čia, kad galėtumėčiau naudoti patogią „scala“ funkciją, kuri grąžina MD5 maišos eilutę:

 def md5(text: String) : String = java.security.MessageDigest.getInstance("MD5").digest(text.getBytes()).map(0xFF  _).map { "%02x".format(_) }.foldLeft(""){_ + _} 
2
20 окт. atsakymas duotas Priyank Desai 20 okt. 2015-10-20 21:27 '15 21:27 2015-10-20 21:27

Skirtingai nei PHP, kur jūs galite ištrinti tekstą md5, tiesiog skambindami funkciją md5($text) ty md5($text) , Java jis tapo šiek tiek sudėtingesnis. Paprastai tai įdiegiau skambindamas funkcijai, kuri grąžina md5 maišos tekstą. Štai kaip aš ją įgyvendinau. Pirmiausia sukurkite funkciją, pavadintą md5encryption jūsų pagrindinės klasės viduje, pvz., md5encryption pateiktą md5encryption .

 public static String 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 = new BigInteger(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 exception JOptionPane.showMessageDialog(null,e1.getClass().getName() + ": " + e1.getMessage()); } return hashtext; } 

Dabar, kai reikia, skambinkite funkcijai, kaip nurodyta toliau.

 String text = textFieldName.getText(); String pass = md5hashing(text); 

Čia matote, kad į maišos tekstą pridedamas nulis, kad atitiktų md5 šifravimą PHP.

2
26 марта '16 в 18:23 2016-03-26 18:23 Atsakymą pateikė Geordy James kovo 26 d. 16, 18:23 2016-03-26 18:23
  import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;  public class MD5 { public static void main(String[] args) { System.out.println(MD5.getMD5("123456")); }  public static String getMD5(String sInput) { String algorithm = ""; if (sInput == null) { return "null"; } try { algorithm = System.getProperty("MD5.algorithm", "MD5"); } catch (SecurityException se) { } MessageDigest md = null; try { md = MessageDigest.getInstance(algorithm); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } byte buffer[] = sInput.getBytes(); for (int count = 0; count < sInput.length(); count++) { md.update(buffer, 0, count); } byte bDigest[] = md.digest(); BigInteger bi = new BigInteger(bDigest); return (bi.toString(16)); } } 

Šiame straipsnyje yra straipsnis apie „Kodinkite“. Patikrinkite: http://codingkit.com/a/JAVA/2013/1020/2216.html

0
20 окт. atsakymas duotas shouyu 20 sp 2013-10-20 16:33 '13, 16:33, 2013-10-20 16:33
 private String hashuj(String dane) throws ServletException{ try { MessageDigest m = MessageDigest.getInstance("MD5"); byte[] bufor = dane.getBytes(); m.update(bufor,0,bufor.length); BigInteger hash = new BigInteger(1,m.dige`enter code here`st()); return String.format("%1$032X", hash); } catch (NoSuchAlgorithmException nsae) { throw new ServletException("Algorytm szyfrowania nie jest obsługiwany!"); } } 
-2
11 апр. Radeko atsakymas, pateiktas balandžio 11 d 2016-04-11 20:29 '16 at 8:29 pm 2016-04-11 20:29
  • 1
  • 2

Kiti klausimai apie žymes arba Užduoti klausimą