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資料加密AES之Aes加密(一)
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
程式設計師之網路安全系列(四):資料加密之非對稱祕鑰
系列目錄: 前文回顧 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 但是上面的問題是明