1. 程式人生 > >Android 資料加密之MD5

Android 資料加密之MD5

什麼是MD5加密?

  • MD5英文全稱“Message-Digest Algorithm 5”,翻譯過來是“訊息摘要演算法5”,由MD2、MD3、MD4演變過來的,是一種單向加密演算法,是不可逆的一種的加密方式

MD5加密有哪些特點?

  • 壓縮性:任意長度的資料,算出的MD5值長度都是固定的。

  • 容易計算:從原資料計算出MD5值很容易。

  • 抗修改性:對原資料進行任何改動,哪怕只修改1個位元組,所得到的MD5值都有很大區別。

  • 強抗碰撞:已知原資料和其MD5值,想找到一個具有相同MD5值的資料(即偽造資料)是非常困難的。

MD5應用場景

  • 一致性驗證
  • 數字簽名
  • 安全訪問認證

MD5加密演算法實現:

1.計算字串MD5值

public static String md5(String string) {

        if (TextUtils.isEmpty(string)) {
            return "";
        }

        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] bytes = md5.digest(string.getBytes());
            String result = ""
; for (byte b : bytes) { String temp = Integer.toHexString(b & 0xff); if (temp.length() == 1) { temp = "0" + temp; } result += temp; } return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return
""; }

2.計算檔案的MD5值

// 計算檔案的 MD5 值
    public static String md5(File file) {
        if (file == null || !file.isFile() || !file.exists()) {
            return "";
        }
        FileInputStream in = null;
        String result = "";
        byte buffer[] = new byte[8192];
        int len;
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            in = new FileInputStream(file);
            while ((len = in.read(buffer)) != -1) {
                md5.update(buffer, 0, len);
            }
            byte[] bytes = md5.digest();

            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result += temp;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(null!=in){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

或者採用nio的方式

public static String md5(File file) {
        String result = "";
        FileInputStream in = null;
        try {
            in = new FileInputStream(file);
            MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(byteBuffer);
            byte[] bytes = md5.digest();
            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result += temp;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != in) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

MD5加密安全性探討:

雖然說MD5加密本身是不可逆的,但並不是不可破譯的,網上有關MD5解密的網站數不勝數,破解機制採用窮舉法,就是我們平時說的跑字典。所以如何才能加大MD5破解的難度呢?

1.對字串多次MD5加密

public static String md5(String string, int times) {
        if (TextUtils.isEmpty(string)) {
            return "";
        }
        String md5 = md5(string);
        for (int i = 0; i < times - 1; i++) {
            md5 = md5(md5);
        }
        return md5(md5);
    }

2.MD5加鹽
加鹽的方式也是多種多樣

  • string+key(鹽值key)然後進行MD5加密
  • 用string明文的hashcode作為鹽,然後進行MD5加密
  • 隨機生成一串字串作為鹽,然後進行MD5加密
public static String md5(String string, String slat) {
        if (TextUtils.isEmpty(string)) {
            return "";
        }
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] bytes = md5.digest((string + slat).getBytes());
            String result = "";
            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result += temp;
            }
            return result;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }

相關推薦

Android資料加密MD5加密

前言:       專案中無論是密碼的儲存或者說判斷檔案是否是同一檔案,都會用到MD5演算法,今天來總結一下MD5加密演算法。 什麼是MD5加密?      MD5英文全稱“Message-Digest Algorithm 5”,翻譯過來是“訊息摘要演算法5”,由MD2、MD3、MD4演變過來的,是一種

Android 資料加密MD5

什麼是MD5加密? MD5英文全稱“Message-Digest Algorithm 5”,翻譯過來是“訊息摘要演算法5”,由MD2、MD3、MD4演變過來的,是一種單向加密演算法,是不可逆的一種的加密方式 MD5加密有哪些特點? 壓縮性:任意長

Android資料加密Aes加密

前言:     專案中除了登陸,支付等介面採用rsa非對稱加密,之外的採用aes對稱加密,今天我們來認識一下aes加密。      其他幾種加密方式: 什麼是aes加密?      高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijn

Android資料加密Des加密

前言:      端午節前有個同事諮詢我有關Android DES加密的相關實現,簡單的實現了一下,今天來總結一下。      其他幾種加密方式: DES加密介紹:      DES是一種對稱加密演算法,所謂對稱加密演算法即:加密和解密使用相同金鑰的演算法。DES加密演算法出自IBM的研究,後來被

Android資料加密Base64編碼演算法

前言:       前面學習總結了平時開發中遇見的各種資料加密方式,最終都會對加密後的二進位制資料進行Base64編碼,起到一種二次加密的效果,其實呢Base64從嚴格意義上來說的話不是一種加密演算法,而是一種編碼演算法,為何要使用Base64編碼呢?它解決了什麼問題?這也是本文探討的東西?      其

Android資料加密Rsa加密

前言:      最近無意中和同事交流資料安全傳輸的問題,想起自己曾經使用過的Rsa非對稱加密演算法,閒下來總結一下。      其他幾種加密方式: 什麼是Rsa加密? RSA演算法是最流行的公鑰密碼演算法,使用長度可以變化的金鑰。RSA是第一個既能用於資料加密也能用於數字簽名的演算法。RSA演算

Android資料加密異或加密演算法

前言:       這幾天被公司臨時拉到去做Android IM即時通訊協議實現,大致看了下他們定的協議,由於之前沒有參與,據說因伺服器效能限制,只達成非明文傳遞,具體原因我不太清楚,不過這裡用的加密方式是採用異或加密。這種加密方式在之前做Android加密記事本的時候採用過這種加密方式。今天已經把客戶端心跳

Android資料加密RSA+AES混合加密

在上一篇Android資料加密 中已經介紹了Android中資料加密的情況,並且在總結中給出了RSA+AES混合加密的方案,下面就來介紹一下RSA+AES混合加密。 1.RSA+AES混合加密過程 Android端的資料加密過程: -首先生成一對

Android資料加密——Base64編碼演算法

前言:前面學習總結了平時開發中遇見的各種資料加密方式,最終都會對加密後的二進位制資料進行Base64編碼,起到一種二次加密的效果,其實呢Base64從嚴格意義上來說的話不是一種加密演算法,而是一種編碼演算法,為何要使用Base64編碼呢?它解決了什麼問題?這也是本文探討的東西?什麼Base64演算法?Base

Android 資料加密 ---- MD5 加密

1. 前言 之前幾篇博文詳細的介紹了異或加密、AES加密、DES 加密、3DES加密,對於這幾種雙向加密的演算法也有了更多的瞭解,為了跟後面另一種演算法RSA 更好的結合使用,先來介紹一下單向加密中的幾個演算法,本文主要分析MD5 演算法。 2. 簡介 MD5訊息摘

Android資料加密AESAes加密(一)

     Android中的加密不止一種,所以就要在不同的情況下使用不同的加密方式,加密又分為對稱加密和非對稱加密,具體的就看看這篇部落格吧---> 點選開啟連結    ,今天我們來看看AES的加密方式:     AES: 高階加密標準(英語:Advanced Encr

Android註冊介面Md5對使用者資訊加密

APP的註冊介面是必不可少的,對於一個學生黨來說如果能在註冊介面對密碼,使用者名稱加密,程式會更加的完善 什麼是Md5 MD5為電腦保安領域廣泛使用的一種雜湊函式,用以提供訊息的完整性保護 MD5的作用是讓大容量資訊在用數字簽名軟體簽署私人金鑰前被”壓縮”

Android資料儲存Sqlite採用SQLCipher資料庫加密實戰

前言:   最近研究了Android Sqlite資料庫(文章地址:http://www.cnblogs.com/whoislcj/p/5506294.html)以及ContentProvider程式間資料共享(http://www.cnblogs.com/whoislcj/p/5507928.html),

Android 資料儲存 SQLite資料庫儲存

轉載自:https://www.cnblogs.com/woider/p/5136734.html ----------------------------------------SQLite資料庫---------------------------------------------- SQLite是一

Android 資料加密方法 AES DES RSA AndroidKeyStore

Java概述 一、使用SecretKeySpec生成祕鑰進行對稱加密 一個問題 如果建立密碼器的時候, Cipher cipher = Cipher.getInstance(TRANSFORMATION); TRANSFORMATION = "AES"如果和生成祕鑰的演算法一樣設定為 “

Android資料加密介紹

Android資料加密介紹 資訊保安 機密性:為了防止資訊被竊聽 完整性:為了防止資訊被篡改 認證:為了防止攻擊者偽裝成真正的傳送者 不可否認性:為了防止傳送者事後否認自己沒有做過 加密方式 java中使用了多種加密方式。常見的加密方式

Android 資料加密 ---- 3DES 加密

1. 前言 隨著計算機的發展,DES 很容易被暴力破解,DES 也一直在完善,在1999年10月25日,DES作為FIPS46-3第四次延長標準期限,其中規定優先使用 3DES,而普通DES只允許在遺留的系統中應用。 2. 介紹 密碼學中,三重資料加密演算法(英語:

Android資料儲存SQLite簡單用法

實現效果圖如下: activity_main.xml佈局檔案 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/a

Android 資料儲存File

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { sup

程式設計師網路安全系列(四):資料加密非對稱祕鑰

系列目錄: 前文回顧 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 但是上面的問題是明