關於用戶密碼的簡單加密(DES+MD5)與複雜加密(自己想的)

 

                                                                                               用戶信息的加密    

需要傳遞的參數:

  用戶信息user(可以將用戶的信息以json的形式)(DES加密後):比如是一串字符串DESString
  時間戳(因爲FES需要的密鑰是16位,時間戳只有10位,那麼再增加一個字符串(可自定義)):
  MD5:這個是用DES加密過後的String,再次用MD5加密一次,只是爲了防止請求的信息在中途被人截取串改




解密:
if ( MD5.md5(user).equals(md5)) {
String aaa = new DES().decrypt(user, time + "breakA");}


加密:
我就不寫了,太簡單了,就是根據解密反向的算一次就行!




PS:這個算是最簡單的加密方式,我自己想出一種複雜一點的加密方式:用3層動態加密,分佈式存儲密碼,並用熱推計算,(尼瑪感覺真心的高安全,都快連自己都找不到密碼了),那我就簡單的說說這個牛逼的加密思路:
1首先,我們在客戶端拿到mac(TC)地址或者imei號(手機)(作用是與該用戶綁定)
2拿到請求的時間sendTime(作用是於該小段時間綁定),作用爲本次密碼爲5分鐘內失效(時間可自定義)
3準備三臺服務器
4開始做加密的過程:
          4.1:首先用戶輸入帳號和密碼之後,我們先拿到以下幾個參數:1   name(帳號)2 pass(密碼)
3 mac或者imei   4當前時間戳 5一個一位隨機數
          4.2:拿到用戶和密碼後進行MD5,得到16位的數字,取imei號的後8位+當前時間戳的後8位(因爲前面兩位表示年份意義不大就從後面截取)=混淆值(也叫密鑰),然後用DES加密(MD5爲需要加密的值,混淆值爲密鑰),得到一個String(比如說值是:abcdefjhijk123456)之後分爲3份,分別放到3個參數中:A=一位隨機數+abcdef,B=jhijkl123456,C=一位隨機數+abcdefjhijk123456 然後將abc的值分別再次ras加密,再傳送給3個服務器(這樣做的目的有兩點:1就算黑客截獲了我一個請求,也沒用,2 就算3個服務器其中一個密碼丟失我也能根據另外兩個密碼計算出第3個密碼),最後在發請求的時候我們對每臺服務器都發送3次不同的(另外兩次爲假請求),(目的就算你截獲我所有服務器的請求,也不知道我哪個請求裏面的參數爲真實參數)。
最後:這種加密算法基本可以百分之99的安全!
優點:
1不怕暴力碰撞,因爲密碼在三個服務器上
2不怕請求信息被截獲,就算被攔截,我是向3哥服務器發送請求,
3就算三個請求都被攔截,我會同時向三個服務器每個都發3條請求(其中有兩條假請求),另外用當前時間戳,可在服務器判斷該請求與時間字段是否在30s內時間差,超過就視爲無效,也就是每次動態生成的密碼只有30s的有效期,在客戶獲取我的所有請求,然後去嘗試18種可能時,以失效(當然其實服務器端可以判斷其他6條假請求,一旦有假請求整個密碼失效(或者是更好的處理方式))
4在數據庫中存放MD5的密碼,這樣出了客戶自己沒有人知道他的密碼,並且3個服務器還有一點好處就是,就算其中一個服務器掛了,可以依賴另外兩個服務器的密碼推算出第3個密碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章