關於使用者密碼的簡單加密(DES+MD5)與複雜加密(自己想的)
阿新 • • 發佈:2019-01-29
使用者資訊的加密
需要傳遞的引數:
使用者資訊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個密碼。