天天看點

安卓逆向 -- 算法基礎(MD5)

一、單向散列函數(消息摘要算法)

1、不管明文多長,散列後的密文定長

2、明文不一樣,散列後結果一定不一樣

3、散列後的密文不可逆

4、一般用于校驗資料完整性、簽名 sign

5、由于密文不可逆,是以背景無法還原,也就是說他要驗證,會在背景以跟前台一樣的方式去重新簽名一遍。也就是說他會把源資料和簽名後的值一起送出到背景。是以我們要保證在簽名時候的資料和送出上去的源資料一緻。這種算法特喜歡在内部加入時間戳,很多粗心的學員,通常會在簽名的時候取一次時間戳,然後在送出源資料的時候,又取一次時間戳,導緻背景驗證失敗。

6、常見算法

MD5

SHA1

SHA256

SHA512

HmacMD5

HmacSHA1

HmacSHA256

二、MD5算法

1、長度128個bit,32個十六進制字元、16個位元組

2、Java版源碼

String bs= "逆向有你a";              MessageDigest md=MessageDigest.getInstance("MD5");//我要用md5算法              md.update(bs.getBytes());//我要加密的資料              byte[] res = md.digest();//給我加密              System.out.println("MD5加密(位元組):"+Arrays.toString(res));              System.out.println("MD5加密(字元串):"+bytes2HexString(res));              MessageDigest mdmd = MessageDigest.getInstance("MD5");              mdmd.update("逆向".getBytes(StandardCharsets.UTF_8));              mdmd.update("有你".getBytes(StandardCharsets.UTF_8));              byte[] mdmdres = mdmd.digest("a".getBytes(StandardCharsets.UTF_8));              System.out.println(bytes2HexString(mdmdres));              運作結果:              MD5加密(位元組):[-71, 14, 97, 33, -121, -29, -25, 68, -80, 106, 94, 49, -21, -116, -13, 120]              MD5加密(字元串):B90E612187E3E744B06A5E31EB8CF378              B90E612187E3E744B06A5E31EB8CF378
           

3、JS版源碼

var CryptoJS=module.exports;              function test()              {              return CryptoJS.MD5("逆向有你a").toString();              }              console.log(test());
           

運作結果:

安卓逆向 -- 算法基礎(MD5)

禁止非法,後果自負

歡迎關注公衆号:逆向有你

歡迎關注視訊号:之乎者也吧

歡迎報名安卓逆向教育訓練,報名微信(QQ):335158573

安卓逆向 -- 算法基礎(MD5)
安卓逆向 -- 算法基礎(MD5)