1. 程式人生 > >使用MD5對SharedPreference的重要資料進行加密

使用MD5對SharedPreference的重要資料進行加密

嘿嘿,上面我們這樣直接把賬號密碼儲存到sp裡,如果沒root的手機,別的應用倒無法訪問手機,如果root了,然後資料給其他應用獲取到,然後造成了一些後果,這...就不怪我們了,哈哈,誰叫你root了~,這鍋我們不背,的確是這樣!但是作為一名有責任心的APP開發人員,我們總不能這樣是吧,我們可以使用一些加密演算法對使用者密碼進行加密,另外我們一般加密的都是使用者密碼!下面我們簡畫個簡單的圖幫助大家理解下加密的處理的流程:

1.簡單的加密處理流程

流程圖如下

流程圖解析

  • Step 1.使用者註冊賬號密碼,賬號密碼校驗後(賬號是否重複,密碼位數 > 6位等),即賬號密碼有效,註冊成功後,我們提交給伺服器的賬號,以及本地加密過的密碼!
  • Step 2.伺服器端將使用者提交的賬號,加密過的密碼儲存到服務端的資料庫中,也就是服務端並不會儲存我們的明文密碼(原始)密碼!
  • Step 3.說回客戶端,如果註冊成功或者登陸成功,你想儲存賬號密碼到SP中,儲存的的密碼也需要走一趟加密流程!即明文密碼——>加密,再儲存!如果不儲存,每次請求的時候,明文密碼也要走一趟家裡流程,然後拿著加密後的密碼來請求伺服器!
  • Step 4.伺服器驗證賬號以及加密密碼,成功,分配客戶端一個session標識,後續客戶端可以拿著這個session來訪問服務端提供的相關服務!

嘿嘿,理解了吧,加密的方法有很多種,小豬也不是這方面的高玩,以前使用過的加密方法是MD5加密,本節也給大家簡單介紹一下這個MD5加密,以及演示下用法~

2.MD5簡單介紹:

1)MD5是什麼鬼?:

答:Message Digest Algorithm MD5(中文名為訊息摘要演算法第五版)為電腦保安領域廣泛使用的一種雜湊函式,用以提供訊息的完整性保護——摘自《百度百科》簡單點說就是一種加密演算法,可以將一個字串,或者檔案,壓縮包,執行MD5加密後,就可以生產一個固定長度為128bit的串!這個串基本唯一!另外我們都知道:一個十六進位制需要用4個bit來表示,那麼對應的MD5的字串長度就為:128 / 4 = 32位了!另外可能你看到一些md5是16位的,只是將32位MD5碼去掉了前八位以及後八位!不信麼,我們來試試百度一下:md5線上解密,第一個:

http://www.cmd5.com/

2)MD5能破解嗎?

答:MD5不可逆,就是說沒有對應的演算法,無法從生成的md5值逆向得到原始資料!當然暴力破解除外,簡單的MD5加密後可以查MD5庫~

3)MD5值唯一嗎?

答:不唯一,一個原始資料只對應一個MD5值,但是一個MD5值可能對應多個原始資料!

3.MD5加密實現例子:

其實網上有很多寫好的MD5的例子,百度或者谷歌一搜一大堆,這裡提供下小豬用的MD5加密工具類!

Md5Util.java

/**
 * Created by Jay on 2015/9/2 0002.
 */publicclass MD5 {publicstaticString getMD5(String content){try{MessageDigest digest =MessageDigest.getInstance("MD5");
            digest.update(content.getBytes());return getHashString(digest);}catch(NoSuchAlgorithmException e){
            e.printStackTrace();}returnnull;}privatestaticString getHashString(MessageDigest digest){StringBuilder builder =newStringBuilder();for(byte b : digest.digest()){
            builder.append(Integer.toHexString((b >>4)&0xf));
            builder.append(Integer.toHexString(b &0xf));}return builder.toString();}}

MainActivity.java直接呼叫getMD5這個靜態方法:

Log.e("HeHe", MD5.getMD5("呵呵"));
我們可以看到Logcat上打印出:

這就是加密過後的呵呵了,我們可以把這串密文拷貝到上面這個md5的線上解密網站:

嘿嘿,果然,只是這樣加密一次,就直接破解了,有點不安全的樣子,那就加密100次咯,就是將加密後的字串再加密,重複100次,我們在原先的基礎上加個加密一百次的方法:

publicstaticString getMD5x100(String content){String s1 = content;for(int i =0;i <100;i++){
        s1 = getMD5(s1);}return s1;}

然後呼叫下,發現列印這個的Log:

複製介面網站上:

好的,裝B成功~

相關推薦

使用MD5SharedPreference重要資料進行加密

嘿嘿,上面我們這樣直接把賬號密碼儲存到sp裡,如果沒root的手機,別的應用倒無法訪問手機,如果root了,然後資料給其他應用獲取到,然後造成了一些後果,這...就不怪我們了,哈哈,誰叫你root了~,這鍋我們不背,的確是這樣!但是作為一名有責任心的APP開發人員,我們總

建立一個加密表空間並錶內資料進行加密的示例

基於表空間的加密概念 對整個表空間進行加密,表空間中的所有物件都是加密的,例如 在加密表空間上建立一個表,表的所有欄位都是加密狀態,適用Oracle11gR2以上版本。 表空間加密資料的優點:不會再收到欄位加密的限制,例如 欄位型別,索引型別,需要設定no salt才可見索

MD5 加密解密類(通過Key 資料進行加密)直接複製使用

import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.spec.S

Android使用KeyStore資料進行加密

談到 Android 安全性話題,Android Developers 官方網站給出了許多很好的建議和講解,涵蓋了儲存資料、許可權、網路、處理憑據、輸入驗證、處理使用者資料、加密等方方面面 金鑰的保護以及網路傳輸安全 應該是移動應用安全最關鍵的內容。Android 提供大量用來保護資

利用反射機制建立工具類資料進行加密和解密

對資料庫的資料進行加密,包括使用者資料、專案資料、聊天資料等,需要在插入表的的時候進行加密,查詢的時候進行解密。利用java的反射機制,建立以下工具類,對資料進行加解密。 public class CryptoUtil { /** * 加密、解密方法 * @param ob

java 使用AES資料進行加密和解密

最近做的聊天功能,李老闆希望對聊天的資料進行加密,然後存入資料庫,首先想到的便是AES加密的方式,以前也用過幾次,這次正好記錄下來: MD5加密是不可逆的,可以對使用者的密碼加密; AES加密是可逆的,可以對資料庫的資料進行加密,因為使用者查詢資料時,要返回明文,適合。 publ

AES資料進行加密與解密

AES對資料進行加密與解密隨著對稱密碼的發展,DES資料加密標準演算法由於金鑰長度較小(56位),已經不適應當今分散式開放網路對資料加密安全性的要求,因此1997年NIST公開徵集新的資料加密標準,即AES[1]。經過三輪的篩選,比利時Joan Daeman和Vincent Rijmen提交的Rijndael

拿來就用:Android sharedpreferences 資料進行加密

先來看看效果: 這裡顯示的密文就是儲存在SP中的密文,下面我們再來看看sp檔案內容 這樣就起到了在sp儲存時的加密功能,下面我們來看看程式碼,加密我使用的是RSA加密,並把祕鑰儲存在androidKeyStore中,這樣就保險,更加保障了我們的祕鑰安

class ImageTest    /*使用異或圖片資料進行加密*/

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class

Java小案例——字符串進行加密解密

i++ 個數 color class 異或運算 揭秘 println scanner 英文 要求:   * 對用戶輸入的每個字符的值進行加密,將解密後的字符串輸出   * 對用戶輸入的已加密字符串進行解密並輸出 實現代碼: import java.util.Sca

老男孩教育每日一題-第94天 -shell腳本知識點:shell腳本進行加密

腳本加密 shell加密 每日一題 題目用shell腳本對系統進行自動化維護,簡單,便捷而且可移植性好.但shell腳本是可讀寫的,很有可能會泄露敏感信息,如用戶名,密碼,路徑,IP等.同樣,在shell腳本運行時會也泄露敏感信息.請問如何不影響腳本運行的前提下,對腳本進行加密答案參考:方法一:s

tf.nn.pool()使用例子:TensorFlow一維資料進行池化

tf.nn.pool()使用例子: 在tensorflow中對一維訊號進行池化操作時使用,輸入資料的維度為三維[batch , in_width, in_channels]。 原文連結: https://www.dotnetperls.com/pool-tensorflow

java匯入excle表格,並且錶格進行相應的修改,並錶格資料進行整理,最後匯出本地表格等一系列操作

1.首先建立一個java專案 2.匯入以下jar包 3.程式碼如下   public class auto_date { private static List<List<String>> readExcel(File file) throws Exception

WPS表格如何散點資料進行指數函式擬合

    1 2 3 4 5 6 7   畫出散點資料未能看出資料的趨勢,而資料的趨勢分析要用到函式的擬合。這篇經驗先介紹如何使用WPS表格對散點資料進行指數函式的擬合,以及如何顯示

【itext學習之路】-------(第三篇)pdf文件進行加密和許可權設定

上篇文章,我們學習了pdf的屬性設定,但是我們知道,在實際開發中,如果pdf文件被黑客盜取的話,那麼pdf中的資訊就會被洩露,因此本篇文章將會介紹pdf的加密設定,並且設定許可權。 首先我們要說明的是,itext中對pdf文件的加密包括兩部分,第一部分是使用者密

java匯入excle表格,並且錶格進行相應的修改,並錶格資料進行整理,最後匯出本地表格等一系列

1.首先建立一個java專案   完成效果如下圖所示 2.匯入以下jar包 3.程式碼如下   其中行和列的操作是根據需求自動劃分的 複製程式碼1 public class auto_date {2 private static List<List<String>> read

response返回資料進行包裝,產生的一個疑問

參考: 回過頭來,我研究了半天filter,實際上下面的部分和filter沒有太大的關係 最近在看設計模式的書,講到了裝飾者模式,然後想到了之前專案中的一個設計:api請求之後,需要返回一個json,這個json為了避免資料結構和結果被別人截獲,資料做了加

【MVC】.NET實踐(三)—資料庫的資料進行刪除與修改

在主介面新增修改和刪除的超連結(Index.cshtml) <table id="tbList"> <tr> <th>id&l

Android 4.4 網路get請求出現中文亂碼 導致伺服器無法傳輸的資料進行解析

最近在進行Android開發的過程中,發現了一個問題,特意在這裡記錄一下。下面我來描述一下這個問題:當我在Android 4.4版本進行http get請求的時候,我的get請求連結裡的中文字串顯示為???,導致伺服器不能正常識別我的引數,從而使程式執行出錯(並不是所有的An

[原始碼和文件分享]程式設計實現硬碟全盤資料進行讀寫資料擦除

背景 在 XP 系統下下,我們可以直接呼叫 WirteFile 函式對磁碟寫入資料,但到了 Windows 7 以及 Windows 7 版本以上的系統,就已經開始變得不那麼簡單了。 在 Windows 7 及以上版本中,對檔案系統和儲存堆疊進行的更改,限制對磁碟和卷的直接訪問,但是,在以下