首先
我看到很多貼子,上面描述MD5加密解密等話題,因此寫此文章為了把MD5加密問題簡單的說個透徹,並且給大家已經實踐過的代碼。
其次
MD5 加密並不是把原文加密,這個大家得注意,既然沒有把原文加密何來的解密呢?簡直是個笑話。MD5的用途就是把一段原文資料通過一定的演算法產生16位元組的密 文,通過這個密文我們可以檢查原文的資料是否被修改過。常用在網路中明文資料轉送,防止傳輸過程中內容被惡意修改。典型的應用協議為 radius,radius協議中有16byte就是MD5所留的,把使用者的密碼加在報文尾部進行MD5,把結果存在網路中,所以明文部分看不到使用者的密 碼,當伺服器收到此包,用同樣的方法進行MD5,如果加密出來的16byte一樣,說明是有效未被惡意修改的網路包。
最後
附上實現的代碼
-
- 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;
- }
-
- }