???我看到很多貼子,上面描述MD5加密解密等話題,因此寫此文章為了把MD5加密問(wèn)題簡(jiǎn)單的說(shuō)個(gè)透徹,并且給大家已經(jīng)實(shí)踐過(guò)的代碼。
其次
???MD5加密并不是把原文加密,這個(gè)大家得注意,既然沒(méi)有把原文加密何來(lái)的解密呢?簡(jiǎn)直是個(gè)笑話。MD5的用途就是把一段原文數(shù)據(jù)通過(guò)一定的算法生成16字節(jié)的密文,通過(guò)這個(gè)密文我們可以檢查原文的數(shù)據(jù)是否被修改過(guò)。常用在網(wǎng)絡(luò)中明文數(shù)據(jù)傳輸,防止傳輸過(guò)程中內(nèi)容被惡意修改。典型的應(yīng)用協(xié)議為radius,radius協(xié)議中有16byte就是MD5所留的,把用戶的密碼加在報(bào)文尾部進(jìn)行MD5,把結(jié)果存在網(wǎng)絡(luò)中,所以明文部分看不到用戶的密碼,當(dāng)服務(wù)器收到此包,用同樣的方法進(jìn)行MD5,如果加密出來(lái)的16byte一樣,說(shuō)明是有效的未被惡意修改的網(wǎng)絡(luò)包。
最后
附上實(shí)現(xiàn)的代碼
- import?java.security.*;
- public?class?MD5?{
- ??/**
- ???*?MD5
- ???*
- ???*?@author?Dreamer
- ???*/
- ??public?MD5()?{
- ??}
- ??public?static?byte[]?md5(byte[]?in)?{
- ????MessageDigest?md?=?null;
- ????byte[]?out?=?new?byte[16];
- ????try?{
- ??????md?=?MessageDigest.getInstance("MD5");
- ????}
- ????catch?(NoSuchAlgorithmException?ex)?{
- ??????System.out.println(ex.toString());
- ????}
- ????md.reset();
- ????md.update(in);
- ????out?=?md.digest();
- ????return?out;
- ??}
- ??public?static?byte[]?md5(byte[]?in,?int?len)?{
- ????MessageDigest?md?=?null;
- ????byte[]?out?=?new?byte[16];
- ????try?{
- ??????md?=?MessageDigest.getInstance("MD5");
- ????}
- ????catch?(NoSuchAlgorithmException?ex)?{
- ??????System.out.println(ex.toString());
- ????}
- ????md.reset();
- ????md.update(in,?0,?len);
- ????out?=?md.digest();
- ????return?out;
- ??}
- }