關(guān)于MD5記錄

項目中有用到md5加密,其實也是在從后臺那數(shù)據(jù)的時候,加一個時間戳的參數(shù)

簡單說明:
MD5:全稱是Message Digest Algorithm 5,譯為“消息摘要算法第5版”
效果:對輸入信息生成唯一的128位散列值(32個字符)
MD5生成的是固定的128bit,即128個0和1的二進(jìn)制位,而在實際應(yīng)用開發(fā)中,通常是以16進(jìn)制輸出的,所以正好就是32位的16進(jìn)制,說白了也就是32個16進(jìn)制的數(shù)字。

MD5特點:
1、壓縮性:任意長度的數(shù)據(jù),算出的MD5值長度都是固定的。
2、容易計算:從原數(shù)據(jù)計算出MD5值很容易。
3、抗修改性:對原數(shù)據(jù)進(jìn)行任何改動,哪怕只修改1個字節(jié),所得到的MD5值都有很大區(qū)別。
4、強抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。

5.輸入兩個不同的明文不會得到相同的輸出值
6.根據(jù)輸出值,不能得到原始的明文,即其過程不可逆(只能加密, 不能解密)

事先介紹一個概念,因為下邊有用到??
加鹽:所謂加鹽, 就是在原本需要加密的信息基礎(chǔ)上,糅入其它內(nèi)容salt。

注意點:
1.一定要和后臺開發(fā)人員約定好,MD5加密的位數(shù)是16位還是32位(大多數(shù)都是32位的),16位的可以通過32位的轉(zhuǎn)換得到
2.MD5加密區(qū)分 大小寫,使用時要和后臺約定好

直接上代碼,方便以后參考
寫一個NSString+MD5的分類
.h文件

/@interface NSString (MD5)

#pragma mark - 加密的位數(shù)為32位
/** 直接加密 */
- (NSString *)MD5_32BIT;
/** 加鹽 */
- (NSString *)MD5_saltStr:(NSString *)saltStr;
/** 多次加密 */
- (NSString *)MD5_againStr:(NSString *)againStr;
/** 亂序加密 */
- (NSString *)MD5_Chaos:(NSString *)chaosStr;

#pragma mark - 加密的位數(shù)為16位

/** 直接加密 */
- (NSString *)MD5_16BIT;


@end

.m文件

//
//  NSString+MD5.m
//  MD5加密
//
//  Created by Edison.3 on 17/4/11.
//  Copyright ? 2017年 Edison.3. All rights reserved.
//

#import "NSString+MD5.h"
#import <CommonCrypto/CommonDigest.h>

#define salt @"addStringYouWant"

@implementation NSString (MD5)

#pragma mar- 32位
// 直接加密
- (NSString *)MD5_32BIT {
    
    const char *cStr = [self UTF8String];
    
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    
    CC_MD5( cStr, (CC_LONG)self.length, digest );
    
    NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [result appendFormat:@"%02X", digest[i]];
    
    return result;
}

// 加鹽
- (NSString *)MD5_saltStr:(NSString *)saltStr {
    
    saltStr = [saltStr stringByAppendingString:salt];
    
    NSString *result =[saltStr MD5_32BIT];
    
    return result;
}

// 多次加密
- (NSString *)MD5_againStr:(NSString *)againStr {
    
    NSString *result = [againStr MD5_32BIT];
    
    result = [result MD5_32BIT];
    
    return result;
}

// 亂序加密
- (NSString *)MD5_Chaos:(NSString *)chaosStr {
    
    NSString *result =[chaosStr MD5_32BIT];
    
    NSString *header =[result substringFromIndex:2];
    
    NSString *footer=[result substringFromIndex:2];
    
    result =[footer stringByAppendingString:header];
    
    return result;
    
}


#pragma mark -  16位
- (NSString *)MD5_16BIT{

    NSString * md5Str = [self MD5_32BIT];
    NSString  *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }
    return string;
}

@end

調(diào)用

   NSString *string = @"明天,就在前方";
    // 調(diào)用 MD5 加密并打印結(jié)果
    NSLog(@"MD5Result       = %@", [string MD5_32BIT]);
    NSLog(@"MD5_saltResult  = %@", [string MD5_saltStr:string]);
    NSLog(@"MD5_againResult = %@", [string MD5_againStr:string]);
    NSLog(@"chaosResult     = %@", [string MD5_Chaos:string]);

大家應(yīng)該都知道有一個MD5破解網(wǎng)站,名字叫做 md5在線解密加密,因此我們在使用MD5加密的時候,最好使用多次加密,加鹽,亂序加密等,不然會很容易被破解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文主要介紹移動端的加解密算法的分類、其優(yōu)缺點特性及應(yīng)用,幫助讀者由淺入深地了解和選擇加解密算法。文中會包含算法的...
    蘋果粉閱讀 11,671評論 5 29
  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 3,018評論 0 6
  • 1. 幾分鐘前,我剛剛好被門禁攔在宿舍外,門內(nèi)的張叔朝我擺了擺手,“小崽子,不能再慣著你了,去網(wǎng)吧湊合一宿吧,以后...
    小樓西的帳篷閱讀 651評論 0 0
  • 職場沉浮近四十載,倏忽間卸下行囊,竟生出幾分手足無措。半生看遍人間百態(tài),嘗盡世態(tài)炎涼與人情冷暖,縱然早有歸期的預(yù)想...
    王立平閱讀 443評論 3 10
  • 早上起晚了,孩子也跟著睡成了小豬。急急忙忙地出門,孩子因為有起床氣,也就鬧得很不愉快,當(dāng)聽到她說奶奶在她面前說我的...
    piano潘潘閱讀 269評論 0 1

友情鏈接更多精彩內(nèi)容