一、單向散列函數(消息摘要算法)
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());
運作結果:
禁止非法,後果自負
歡迎關注公衆号:逆向有你
歡迎關注視訊号:之乎者也吧
歡迎報名安卓逆向教育訓練,報名微信(QQ):335158573