Feed seluruh input sebagai byte[]dan hitung hash dalam satu operasi dengan md.digest(bytes).
Beri makan MessageDigestsatu byte[]potong sekaligus dengan menelepon md.update(bytes). Setelah selesai menambahkan byte input, hitung hash dengan
md.digest().
Yang byte[]dikembalikan md.digest()adalah hash MD5.
Satu hal yang tidak disebutkan di sini, dan mengejutkan saya. Kelas MessageDigest TIDAK aman untuk thread. Jika mereka akan digunakan oleh utas yang berbeda, buat saja yang baru, alih-alih mencoba menggunakannya kembali.
mjuarez
39
Ini menggunakan beberapa metode untuk mengubah keadaan internalnya. Bagaimana tidak adanya pengaman benang bisa mengejutkan sama sekali?
Bombe
90
@Bombe: mengapa kita berharap harus tahu tentang keadaan internal MessageDigest?
Dan Barowy
28
@DanBarowy baik, Anda yang bermutasi itu (yaitu memanggil metode yang tidak mengembalikan nilai-nilai tetapi menyebabkan metode lain untuk kembali nilai-nilai yang berbeda) sehingga sampai terbukti sebaliknya Anda harus selalu berasumsi bahwa itu tidak thread-aman untuk melakukannya.
Bombe
3
@Traubenfuchs MessageDigestmemungkinkan Anda untuk memasukkan data dalam potongan-potongan. Itu tidak mungkin dengan metode statis. Meskipun Anda dapat berdebat, mereka seharusnya menambahkan satu untuk kenyamanan ketika Anda dapat melewatkan semua data sekaligus.
user253751
690
The MessageDigestkelas dapat menyediakan Anda dengan sebuah instance dari MD5 digest.
Ketika bekerja dengan string dan kelas crypto pastikan untuk selalu menentukan pengkodean yang Anda inginkan representasi byte. Jika Anda hanya menggunakannya string.getBytes()akan menggunakan platform default. (Tidak semua platform menggunakan standar yang sama)
Jika Anda memiliki banyak data, lihat .update(byte[])metode yang dapat dipanggil berulang kali. Kemudian panggil .digest()untuk mendapatkan hash yang dihasilkan.
Topik ini juga berguna jika Anda perlu mengubah byte yang dihasilkan menjadi string hex.
weekens
1
Lalu bagaimana cara Anda mengonversikan sampel ini ke sebuah string sehingga kita bisa memasukkannya ke dalam mysql?
Humphrey
2
Lebih baik lagi jika memungkinkan yourString.getBytes(StandardCharsets.UTF_8). Ini mencegah penanganan UnsupportedEncodingException.
Hummeling Engineering BV
267
Jika Anda benar-benar menginginkan jawaban kembali sebagai string sebagai lawan dari array byte, Anda selalu dapat melakukan sesuatu seperti ini:
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: Tidak benar, metode BigInteger.toString akan mengembalikan angka penuh dalam basis yang ditentukan. 0x0606 akan dicetak sebagai 606, hanya nol yang tertinggal dihilangkan,
Spidey
11
Nitpick kecil: m.reset () tidak diperlukan segera setelah memanggil getInstance. Lebih kecil: 'teks Anda di sini' membutuhkan tanda kutip ganda.
David Leppik
Dari Java 11 dan seterusnya , Anda dapat menggunakan hashtext = "0".repeat(32 - hashtext.length()) + hashtextalih-alih while, sehingga editor tidak akan memberi Anda peringatan bahwa Anda melakukan penggabungan string di dalam satu lingkaran.
tom
Alih-alih m.update (plaintext.getBytes ()); Saya akan merekomendasikan menentukan encoding. seperti m.update (plaintext.getBytes ("UTF-8")); getBytes () tidak menjamin pengkodean dan dapat bervariasi dari satu sistem ke sistem lainnya yang dapat menghasilkan hasil MD5 berbeda antara sistem untuk String yang sama.
user1819780
256
Anda mungkin juga ingin melihat kelas DigestUtils dari proyek codec apache commons , yang menyediakan metode yang sangat nyaman untuk membuat MD5 atau SHA dicest.
Secara khusus, metode-metode yang mengembalikan representasi yang dikodekan "aman" dari data byte dalam bentuk string.
Rob
4
Namun tidak ada cara mudah untuk memasukkan kelas DigestUtils ke proyek Anda tanpa menambahkan satu ton lib, atau memindahkan kelas "per tangan" yang membutuhkan setidaknya dua kelas lagi.
iuiz
Tidak dapat menemukannya di repo pakar. Grrrr.
sparkyspider
5
Seharusnya berada di repositori Maven pusat, kecuali saya menjadi gila: groupId = commons-codec artifactId = commons-codec versi = 1.5
Nick Spacek
160
Menemukan ini:
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;}
di situs di bawah ini, saya tidak mengambil kredit untuk itu, tetapi ini adalah solusi yang berfungsi! Bagi saya banyak kode lain tidak berfungsi dengan baik, saya akhirnya hilang 0s di hash. Yang ini tampaknya sama dengan PHP. sumber: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093
Anda harus menentukan pengkodean untuk digunakan getBytes(), jika tidak, kode Anda akan mendapatkan hasil yang berbeda pada platform / pengaturan pengguna yang berbeda.
Paŭlo Ebermann
@ PaŭloEbermann melakukan MessageDigest.getInstance ("MD5"); tidak cukup? Saya mencoba untuk menambahkan "MD5" di getBytes () tetapi ia mengembalikan kesalahan
Blaze Tama
2
@BlazeTama "MD5" bukan penyandian, itu adalah algoritma intisari pesan (dan bukan yang harus digunakan dalam aplikasi baru). Pengkodean adalah pasangan algoritma yang mengubah byte ke string dan string ke byte. Contohnya adalah "UTF-8", "US-ASCII", "ISO-8859-1", "UTF-16BE", dan sejenisnya. Gunakan pengkodean yang sama seperti setiap pihak lain yang menghitung hash dari string ini, jika tidak, Anda akan mendapatkan hasil yang berbeda.
Paŭlo Ebermann
6
Sebagai contoh set karakter ... (gunakan UTF-8, itu yang terbaik dan paling kompatibel menurut saya) ...byte[] array = md.digest(md5.getBytes(Charset.forName("UTF-8")));
Richard
Karena ini bukan solusi saya, dan saya tidak menguji semua skenario sendiri, saya akan membiarkannya tidak berubah, meskipun saya pikir menentukan pengkodean dll mungkin adalah ide yang baik.
dac2009
88
Inilah cara saya menggunakannya:
finalMessageDigest messageDigest =MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));finalbyte[] resultByte = messageDigest.digest();finalString result =newString(Hex.encodeHex(resultByte));
di mana Hex berada: org.apache.commons.codec.binary.Hexdari proyek Apache Commons .
Bagus. Itu tidak jatuh ke dalam perangkap memotong nol terkemuka.
Markus Pscheidt
2
Hati-hati ini tidak akan berfungsi untuk Android jika Anda menggunakan API level <19, tetapi Anda hanya perlu mengubah baris kedua dengan md5.update (string.getBytes ("UTF-8")); Ini akan menambah satu lagi pengecualian yang diperiksa untuk ditangani, ...
Fran Marzoa
34
Menemukan solusi yang jauh lebih bersih dalam hal mendapatkan representasi String kembali dari hash 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));}}
Mengapa jawaban ini -1 sedangkan jawaban lainnya, lebih pendek dan kurang deskriptif +146?
Nilzor
4
Senang menggunakan BigInteger untuk mendapatkan nilai hex +1
Dave.B
5
Saya baru tahu bahwa dalam beberapa kasus ini hanya menghasilkan 31 karakter panjang MD5, bukan 32 sebagaimana mestinya
kovica
3
@ Kovica ini karena, nol awal akan terpotong jika saya ingat benar .. String.format("%032x", new BigInteger(1, hash)); Ini harus menyelesaikan ini. 'hash' adalah byte [] dari hash.
Hanya satu liner yang saya lihat yang tidak menggunakan perpustakaan eksternal.
holmis83
Kecuali saya salah ini akan selalu kembali dalam huruf besar yang tidak akan sejajar dengan md5 yang dibuat tanpa menggunakan hex. Bahkan tidak yakin itu benar-benar md5
walshie4
2
@ walshie4 tidak ada MD5 tanpa hex (lihat ietf.org/rfc/rfc1321.txt ), untuk mendapatkannya dalam huruf kecil cukup tambahkan .toLower (). Bandingkan hasilnya dengan contoh-contoh di misalnya en.wikipedia.org/wiki/MD5 maka Anda akan memiliki kesempatan yang lebih baik untuk percaya bahwa kode perpustakaan Javas benar.
stacker
28
Saya memiliki Kelas (Hash) untuk mengonversi teks biasa dalam hash dalam format: md5 atau sha1, simillar fungsi-fungsi 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");}}
Jawaban Bombe benar, namun perhatikan bahwa kecuali Anda benar-benar harus menggunakan MD5 (mis. Dipaksakan pada Anda untuk interoperabilitas), pilihan yang lebih baik adalah SHA1 karena MD5 memiliki kelemahan untuk penggunaan jangka panjang.
Saya harus menambahkan bahwa SHA1 juga memiliki kelemahan teoretis, tetapi tidak separah itu. Keadaan canggih saat ini dalam hashing adalah bahwa ada sejumlah fungsi hash penggantian kandidat tetapi belum ada yang muncul sebagai praktik terbaik standar untuk menggantikan SHA1. Jadi, tergantung pada kebutuhan Anda, Anda akan disarankan untuk membuat algoritma hash Anda dapat dikonfigurasi sehingga dapat diganti di masa depan.
Bisakah Anda mengarahkan saya ke beberapa sumber, di mana saya bisa membaca tentang kelebihan dan kelemahan masing-masing?
Akshay
Mungkin yang terbaik yang dapat Anda lakukan saat ini adalah menggunakan SHA1 dan siap untuk menggantinya di masa depan. Anda dapat menggunakan fungsi-fungsi yang lebih baru tetapi mereka belum mengalami banyak penelitian. Anda dapat melacak sumber daya keamanan online untuk mengetahui kapan ini berubah - misalnya blog Bruce Schneier.
frankodwyer
7
SHA1 berlebihan kecuali jika Anda menginginkan hash yang aman secara kriptografis, yaitu Anda tidak ingin hash membantu dalam merekonstruksi pesan asli, Anda juga tidak ingin penyerang yang pandai untuk membuat pesan lain yang cocok dengan hash. Jika aslinya bukan rahasia dan hash tidak digunakan untuk keamanan, MD5 cepat dan mudah. Misalnya, Google Web Toolkit menggunakan hash MD5 dalam URL JavaScript (mis. Foo.js? Hash = 12345).
Ini adalah perpustakaan yang solid dan mandiri dengan ketergantungan minimal. Barang bagus.
Ajax
Saya merasa sangat berguna. Butuh 15357 ms untuk file 4,57GB sedangkan implementasi inbuilt java butuh 19094 ms.
bkrish
11
Saya tidak tahu apakah ini relevan bagi siapa pun yang membaca ini, tetapi saya hanya memiliki masalah yang saya inginkan
unduh file dari URL yang diberikan dan
bandingkan MD5-nya dengan nilai yang diketahui.
Saya ingin melakukannya dengan kelas JRE saja (tanpa Apache Commons atau yang serupa). Pencarian web cepat tidak menunjukkan kepada saya cuplikan kode sampel melakukan keduanya pada saat yang sama, hanya setiap tugas secara terpisah. Karena ini mengharuskan untuk membaca file yang sama dua kali, saya pikir mungkin ada baiknya untuk menulis beberapa kode yang menyatukan kedua tugas, menghitung checksum dengan cepat saat mengunduh file. Ini adalah hasil saya (maaf jika itu bukan Java yang sempurna, tapi saya kira Anda tetap mendapatkan idenya):
Oh BTW, sebelum orang lain kecuali saya sendiri menyadari betapa buruknya pengetahuan JRE saya: Saya baru saja menemukan DigestInputStream dan DigestOutputStream . Saya akan mengedit solusi asli saya untuk mencerminkan apa yang baru saja saya pelajari.
kriegaex
6
Lihatlah tautan berikut, Contoh mendapat Hash MD5 dari gambar yang disediakan:
Hash MD5 dari Gambar
Untuk apa nilainya, saya menemukan ini karena saya ingin mensintesis GUID dari kunci alami untuk program yang akan menginstal komponen COM; Saya ingin mengubah ukuran agar tidak mengelola siklus hidup GUID. Saya akan menggunakan MD5 dan kemudian menggunakan kelas UUID untuk mendapatkan string dari itu. (http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439 memunculkan masalah ini).
Bagaimanapun, java.util.UUID dapat memberi Anda String yang bagus dari byte MD5.
sebenarnya ia menerima tidak hanya array byte MD5 (ukuran == 16). Anda dapat melewatkan array byte dengan panjang berapa pun. Ini akan dikonversikan ke MD5 bytes array dengan menggunakan MD5 MessageDigest(lihat nameUUIDFromBytes () kode sumber )
Tidak seperti PHP di mana Anda dapat melakukan hashing MD5 teks Anda dengan hanya memanggil fungsi md5 yaitu md5($text), di Jawa itu dibuat sedikit rumit. Saya biasanya menerapkannya dengan memanggil fungsi yang mengembalikan teks hash md5. Inilah cara saya mengimplementasikannya, Pertama buat fungsi bernama md5hashingdi dalam kelas utama Anda seperti yang diberikan di bawah ini.
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;}
Sekarang panggil fungsi tersebut kapan pun Anda butuhkan seperti yang diberikan di bawah ini.
String text = textFieldName.getText();String pass = md5hashing(text);
Di sini Anda dapat melihat bahwa hashtext ditambahkan dengan nol untuk membuatnya cocok dengan hashing md5 di PHP.
MD5 baik-baik saja jika Anda tidak memerlukan keamanan terbaik, dan jika Anda melakukan sesuatu seperti memeriksa integritas file maka keamanan bukanlah pertimbangan. Dalam kasus seperti itu Anda mungkin ingin mempertimbangkan sesuatu yang lebih sederhana dan lebih cepat, seperti Adler32, yang juga didukung oleh perpustakaan Java.
Apa yang membuat Anda berpikir integritas file bukan masalah keamanan?
Jeremy Huiskamp
5
yang ini memberikan md5 persis seperti yang Anda dapatkan dari fungsi md5 mysql atau fungsi md5 php dll. Ini adalah yang saya gunakan (Anda dapat mengubah sesuai dengan kebutuhan Anda)
Ini mungkin solusi terburuk karena menghilangkan nol di depan.
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)
Anda dapat menghasilkan hash MD5 untuk teks yang diberikan dengan memanfaatkan metode di MessageDigestkelas dalam java.securitypaket. Di bawah ini adalah cuplikan kode lengkap,
Output dari fungsi MD5 adalah hash 128 bit yang diwakili oleh 32 angka heksadesimal.
Jika Anda menggunakan database seperti MySQL, Anda dapat melakukannya dengan cara yang lebih sederhana. Kueri Select MD5(“text here”)akan mengembalikan hash MD5 teks di braket.
Jawaban:
Kamu butuh
java.security.MessageDigest
.Panggil
MessageDigest.getInstance("MD5")
untuk mendapatkan instance MD5 yangMessageDigest
dapat Anda gunakan.Hitung hash dengan melakukan salah satu dari:
byte[]
dan hitung hash dalam satu operasi denganmd.digest(bytes)
.MessageDigest
satubyte[]
potong sekaligus dengan meneleponmd.update(bytes)
. Setelah selesai menambahkan byte input, hitung hash denganmd.digest()
.Yang
byte[]
dikembalikanmd.digest()
adalah hash MD5.sumber
MessageDigest
memungkinkan Anda untuk memasukkan data dalam potongan-potongan. Itu tidak mungkin dengan metode statis. Meskipun Anda dapat berdebat, mereka seharusnya menambahkan satu untuk kenyamanan ketika Anda dapat melewatkan semua data sekaligus.The
MessageDigest
kelas dapat menyediakan Anda dengan sebuah instance dari MD5 digest.Ketika bekerja dengan string dan kelas crypto pastikan untuk selalu menentukan pengkodean yang Anda inginkan representasi byte. Jika Anda hanya menggunakannya
string.getBytes()
akan menggunakan platform default. (Tidak semua platform menggunakan standar yang sama)Jika Anda memiliki banyak data, lihat
.update(byte[])
metode yang dapat dipanggil berulang kali. Kemudian panggil.digest()
untuk mendapatkan hash yang dihasilkan.sumber
yourString.getBytes(StandardCharsets.UTF_8)
. Ini mencegah penangananUnsupportedEncodingException
.Jika Anda benar-benar menginginkan jawaban kembali sebagai string sebagai lawan dari array byte, Anda selalu dapat melakukan sesuatu seperti ini:
sumber
hashtext = "0".repeat(32 - hashtext.length()) + hashtext
alih-alihwhile
, sehingga editor tidak akan memberi Anda peringatan bahwa Anda melakukan penggabungan string di dalam satu lingkaran.Anda mungkin juga ingin melihat kelas DigestUtils dari proyek codec apache commons , yang menyediakan metode yang sangat nyaman untuk membuat MD5 atau SHA dicest.
sumber
Menemukan ini:
di situs di bawah ini, saya tidak mengambil kredit untuk itu, tetapi ini adalah solusi yang berfungsi! Bagi saya banyak kode lain tidak berfungsi dengan baik, saya akhirnya hilang 0s di hash. Yang ini tampaknya sama dengan PHP. sumber: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093
sumber
getBytes()
, jika tidak, kode Anda akan mendapatkan hasil yang berbeda pada platform / pengaturan pengguna yang berbeda.byte[] array = md.digest(md5.getBytes(Charset.forName("UTF-8")));
Inilah cara saya menggunakannya:
di mana Hex berada:
org.apache.commons.codec.binary.Hex
dari proyek Apache Commons .sumber
String result = Hex.encodeHexString(resultByte);
Saya baru saja mengunduh commons-codec.jar dan mendapatkan php sempurna seperti md5. Ini manual .
Impor saja ke proyek Anda dan gunakan
dan begitulah.
sumber
Saya menemukan ini sebagai cara yang paling jelas dan ringkas untuk melakukannya:
sumber
Menemukan solusi yang jauh lebih bersih dalam hal mendapatkan representasi String kembali dari hash MD5.
Kode diekstraksi dari sini .
sumber
String.format("%032x", new BigInteger(1, hash));
Ini harus menyelesaikan ini. 'hash' adalah byte [] dari hash.Pilihan lain adalah menggunakan metode Hashing Guava :
Berguna jika Anda sudah menggunakan Jambu Biji (yang jika tidak, Anda mungkin harus).
sumber
Hashing.md5().hashString("my string").asBytes();
Implementasi lain:
sumber
Saya memiliki Kelas (Hash) untuk mengonversi teks biasa dalam hash dalam format: md5 atau sha1, simillar fungsi-fungsi php ( md5 , sha1 ):
Pengujian dengan JUnit dan PHP
Script PHP:
Keluaran skrip PHP:
Menggunakan contoh dan Pengujian dengan JUnit:
Kode di GitHub
sumber
Tidak perlu membuatnya terlalu rumit.
DigestUtils berfungsi dengan baik dan membuat Anda nyaman saat bekerja dengan
md5
hash.atau
Anda dapat menggunakan metode enkripsi lain seperti
sha
ataumd
.sumber
Jawaban saya yang tidak terlalu terbuka:
sumber
String.format("%1$032X", big)
memiliki format huruf besarAda
DigestUtils
kelas di Spring juga:http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/util/DigestUtils.html
Kelas ini berisi metode
md5DigestAsHex()
yang melakukan pekerjaan.sumber
Anda dapat mencoba mengikuti. Lihat detail dan unduh kode di sini: http://jkssweetlife.com/java-hashgenerator-md5-sha-1/
sumber
Jawaban Bombe benar, namun perhatikan bahwa kecuali Anda benar-benar harus menggunakan MD5 (mis. Dipaksakan pada Anda untuk interoperabilitas), pilihan yang lebih baik adalah SHA1 karena MD5 memiliki kelemahan untuk penggunaan jangka panjang.
Saya harus menambahkan bahwa SHA1 juga memiliki kelemahan teoretis, tetapi tidak separah itu. Keadaan canggih saat ini dalam hashing adalah bahwa ada sejumlah fungsi hash penggantian kandidat tetapi belum ada yang muncul sebagai praktik terbaik standar untuk menggantikan SHA1. Jadi, tergantung pada kebutuhan Anda, Anda akan disarankan untuk membuat algoritma hash Anda dapat dikonfigurasi sehingga dapat diganti di masa depan.
sumber
Implementasi lain: Implementasi MD5 Cepat di Jawa
sumber
Saya tidak tahu apakah ini relevan bagi siapa pun yang membaca ini, tetapi saya hanya memiliki masalah yang saya inginkan
Saya ingin melakukannya dengan kelas JRE saja (tanpa Apache Commons atau yang serupa). Pencarian web cepat tidak menunjukkan kepada saya cuplikan kode sampel melakukan keduanya pada saat yang sama, hanya setiap tugas secara terpisah. Karena ini mengharuskan untuk membaca file yang sama dua kali, saya pikir mungkin ada baiknya untuk menulis beberapa kode yang menyatukan kedua tugas, menghitung checksum dengan cepat saat mengunduh file. Ini adalah hasil saya (maaf jika itu bukan Java yang sempurna, tapi saya kira Anda tetap mendapatkan idenya):
sumber
Lihatlah tautan berikut, Contoh mendapat Hash MD5 dari gambar yang disediakan: Hash MD5 dari Gambar
sumber
Untuk apa nilainya, saya menemukan ini karena saya ingin mensintesis GUID dari kunci alami untuk program yang akan menginstal komponen COM; Saya ingin mengubah ukuran agar tidak mengelola siklus hidup GUID. Saya akan menggunakan MD5 dan kemudian menggunakan kelas UUID untuk mendapatkan string dari itu. (http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439 memunculkan masalah ini).
Bagaimanapun, java.util.UUID dapat memberi Anda String yang bagus dari byte MD5.
sumber
MessageDigest
(lihat nameUUIDFromBytes () kode sumber )sumber
Tidak seperti PHP di mana Anda dapat melakukan hashing MD5 teks Anda dengan hanya memanggil fungsi md5 yaitu
md5($text)
, di Jawa itu dibuat sedikit rumit. Saya biasanya menerapkannya dengan memanggil fungsi yang mengembalikan teks hash md5. Inilah cara saya mengimplementasikannya, Pertama buat fungsi bernamamd5hashing
di dalam kelas utama Anda seperti yang diberikan di bawah ini.Sekarang panggil fungsi tersebut kapan pun Anda butuhkan seperti yang diberikan di bawah ini.
Di sini Anda dapat melihat bahwa hashtext ditambahkan dengan nol untuk membuatnya cocok dengan hashing md5 di PHP.
sumber
MD5 baik-baik saja jika Anda tidak memerlukan keamanan terbaik, dan jika Anda melakukan sesuatu seperti memeriksa integritas file maka keamanan bukanlah pertimbangan. Dalam kasus seperti itu Anda mungkin ingin mempertimbangkan sesuatu yang lebih sederhana dan lebih cepat, seperti Adler32, yang juga didukung oleh perpustakaan Java.
sumber
yang ini memberikan md5 persis seperti yang Anda dapatkan dari fungsi md5 mysql atau fungsi md5 php dll. Ini adalah yang saya gunakan (Anda dapat mengubah sesuai dengan kebutuhan Anda)
sumber
coba ini:
sumber
sumber
Anda dapat menghasilkan hash MD5 untuk teks yang diberikan dengan memanfaatkan metode di
MessageDigest
kelas dalamjava.security
paket. Di bawah ini adalah cuplikan kode lengkap,Output dari fungsi MD5 adalah hash 128 bit yang diwakili oleh 32 angka heksadesimal.
Jika Anda menggunakan database seperti MySQL, Anda dapat melakukannya dengan cara yang lebih sederhana. Kueri
Select MD5(“text here”)
akan mengembalikan hash MD5 teks di braket.sumber
Inilah yang saya datang ke sini untuk- fungsi scala yang berguna yang mengembalikan string hash MD5:
sumber
Ada sebuah artikel tentang Codingkit tentang itu. Lihat: http://codingkit.com/a/JAVA/2013/1020/2216.html
sumber