MD5之學習筆記
MD5即Message-Digest Algorithm 5(資訊-摘要演算法5),提供訊息完整性保護的一種雜湊函式。它像人的指紋一樣是唯一的 ,多用於使用者登入密碼儲存以及校驗檔案在傳輸過程中是否被修改等。
經常在下載jar包的時候,後邊會有一個MD5 的連結
點選MD5進去之後就是一個字串: 6c10e15835ab214464228a9beb7afba8 *httpd-2.2.31.tar.bz2
在下載完之後可以通過檢視檔案的MD5值來判斷是否被修改
原始資料通過MD5方式形成摘要之後想要找回資料是很困難的,所以安全性高,多數系統和專案在用,下邊給出幾種通過MD5生成摘要的方式:
package test;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
public class testMD5 {
private static String src="study MD5";
public static void main(String[] args) {
jdkMD5();
bcMD5();
ccMD5();
}
public static void jdkMD5(){
try {
MessageDigest md=MessageDigest.getInstance("MD5");
byte[] jdkMd5bytes=md.digest(src.getBytes());
//byte 陣列轉換成16進位制
//方式一 :手動寫轉換16進位制的方法
String dkMd5Str1=bytesToHex(jdkMd5bytes);
System.out.println("Java MD5:"+dkMd5Str1);
//引用第三方包 cc
String dkMd5Str2=Hex.encodeHexString(jdkMd5bytes);
System.out.println("Java MD5:"+dkMd5Str2);
String dkMd5Str3=bytes2HexString(jdkMd5bytes);
System.out.println("Java MD5:"+dkMd5Str3);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/**
* 位元組轉換成16進位制字串方法一
* @param bytes
* @return
* */
public static String bytesToHex(byte[] bytes) {
StringBuffer md5str = new StringBuffer(); //把陣列每一位元組換成16進位制連成md5字串
int digital;
for (int i = 0; i < bytes.length; i++) {
digital = bytes[i];
if(digital < 0) {
digital += 256;
}
if(digital < 16){
md5str.append("0");
}
md5str.append(Integer.toHexString(digital));
}
return md5str.toString().toUpperCase();
}
/**
* 位元組轉換成16進位制字串方法二
* @param bytes
* @return
* */
public static String bytes2HexString(byte[] b) {
StringBuffer result = new StringBuffer();
String hex;
for (int i = 0; i < b.length; i++) {
hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
result.append(hex.toUpperCase());
}
return result.toString();
}
//BC 引入 bcprov-jdk15.jar
public static void bcMD5(){
Digest digest=new MD5Digest();
digest.update(src.getBytes(), 0,src.getBytes().length);
byte[] md5Bytes=new byte[digest.getDigestSize()];
digest.doFinal(md5Bytes, 0);
System.out.println("BC MD5:"+new String(org.bouncycastle.util.encoders.Hex.encode(md5Bytes)));
}
//CC 引用 commons-codec-1.5.jar
public static void ccMD5(){
System.out.println("CC MD5:"+DigestUtils.md5Hex(src.getBytes()));
}
}
輸出結果:
Java MD5:4C6E2253053B1ED9E515EA0FA8F10439
Java MD5:4c6e2253053b1ed9e515ea0fa8f10439
Java MD5:4C6E2253053B1ED9E515EA0FA8F10439
BC MD5:4c6e2253053b1ed9e515ea0fa8f10439
CC MD5:4c6e2253053b1ed9e515ea0fa8f10439
相關文章
- node學習筆記之39筆記
- 學習筆記之測試筆記
- Swoft 學習筆記之配置筆記
- Boltdb學習筆記之〇--概述筆記
- flask學習筆記之blueprintFlask筆記
- JS學習筆記之this指向JS筆記
- Java學習筆記之staticJava筆記
- oracle之awr學習筆記Oracle筆記
- Web之http學習筆記WebHTTP筆記
- 《筆記》之學習高併發筆記
- Vue(1)之—— Vuex學習筆記Vue筆記
- swoft 學習筆記之 response 篇筆記
- JVM學習筆記之棧區JVM筆記
- hive學習筆記之十一:UDTFHive筆記
- Golang學習筆記之方法(method)Golang筆記
- 學習筆記:DOM之appendChild筆記APP
- Java學習筆記之I/OJava筆記
- C++ 學習筆記之 引用C++筆記
- Android學習筆記之IntentAndroid筆記Intent
- Netty學習筆記之ChannelHandlerNetty筆記
- Java學習筆記之檔案Java筆記
- 安卓學習筆記之Activity(一)安卓筆記
- Java學習筆記之陣列Java筆記陣列
- Java學習筆記之繼承Java筆記繼承
- swift 學習筆記之陣列Swift筆記陣列
- CUDA 學習筆記之程式棧筆記
- Python學習筆記之序列Python筆記
- robot framework學習筆記之九-雜記Framework筆記
- numpy的學習筆記\pandas學習筆記筆記
- Vue學習筆記之Webpack的使用Vue筆記Web
- MongoDB 學習筆記之常用 shell 命令MongoDB筆記
- ReactNative學習筆記十一之FlatListReact筆記
- Swoft 學習筆記之 request 請求筆記
- swoft 學習筆記之驗證器筆記
- Swoft 學習筆記之控制器筆記
- go 學習筆記之工作空間Go筆記
- Laravel 學習筆記之 request validationLaravel筆記
- ES6學習筆記之Function筆記Function