柯南回憶錄之加密(七)

Message Digest Algorithm MD5(中文名為消息摘要算法第五版)為計(jì)算機(jī)安全領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護(hù)霉猛。該算法的文件號(hào)為RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于確保信息傳輸完整一致。是計(jì)算機(jī)廣泛使用的雜湊算法之一(又譯摘要算法只冻、哈希算法)轩端,主流編程語(yǔ)言普遍已有MD5實(shí)現(xiàn)。將數(shù)據(jù)(如漢字)運(yùn)算為另一固定長(zhǎng)度值吃挑,是雜湊算法的基礎(chǔ)原理,MD5的前身有MD2街立、MD3MD4舶衬。

MD5算法具有以下特點(diǎn):

1、壓縮性:任意長(zhǎng)度的數(shù)據(jù)赎离,算出的MD5值長(zhǎng)度都是固定的逛犹。

2、容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易梁剔。

3虽画、抗修改性:對(duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié)荣病,所得到的MD5值都有很大區(qū)別码撰。

4、強(qiáng)抗碰撞:已知原數(shù)據(jù)和其MD5值个盆,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的脖岛。

MD5的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個(gè)任意長(zhǎng)度的字節(jié)串變換成一定長(zhǎng)的十六進(jìn)制數(shù)字串)。除了MD5以外颊亮,其中比較有名的還有sha-1柴梆、RIPEMD以及Haval等。

安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標(biāo)準(zhǔn)(Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)终惑。對(duì)于長(zhǎng)度小于2^64位的消息绍在,SHA1會(huì)產(chǎn)生一個(gè)160位的消息摘要。該算法經(jīng)過(guò)加密專(zhuān)家多年來(lái)的發(fā)展和改進(jìn)已日益完善,并被廣泛使用偿渡。該算法的思想是接收一段明文臼寄,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更小)密文溜宽,也可以簡(jiǎn)單的理解為取一串輸入碼(稱(chēng)為預(yù)映射或信息)脯厨,并把它們轉(zhuǎn)化為長(zhǎng)度較短、位數(shù)固定的輸出序列即散列值(也稱(chēng)為信息摘要或信息認(rèn)證代碼)的過(guò)程坑质。散列函數(shù)值可以說(shuō)是對(duì)明文的一種“指紋”或是“摘要”所以對(duì)散列值的數(shù)字簽名就可以視為對(duì)此明文的數(shù)字簽名合武。

SHA-1是1994年修訂的版本,糾正了SH一個(gè)未公布的缺陷涡扼。這種算法接受的輸入文檔小于2的64次方 位稼跳,產(chǎn)生160位的報(bào)文摘要。該算法實(shí)際的目標(biāo)使得找出一個(gè)能夠匹配給定的散列值的文本是不可能的計(jì)算吃沪,也就是說(shuō)汤善,如果對(duì)文檔A已經(jīng)計(jì)算出了散列值H(A),那么很難找到一個(gè)文檔B票彪,使其散列值H(B)=H(A)红淡,尤其困難的是無(wú)法找到滿(mǎn)足上述條件的,而且有特定內(nèi)容的文檔B降铸。SHA算法的缺點(diǎn)是速度比MD5慢在旱,但是SHA的報(bào)文摘要更長(zhǎng),更有利于對(duì)抗野蠻的攻擊推掸!

/*

*字符串Md5加密

*/

- (NSString*)ConanMd5EncryptionStr;

/*

*字符串Sha1加密

*/

- (NSString*)ConanSha1EncryptionStr;

/*

*文件Md5加密

*/

- (NSString*)ConanMd5HashOfPath:(NSString*)path;

/*

*文件Sha1加密

*/

- (NSString*)ConanShaHashOfPath:(NSString*)path;


- (NSString*) ConanMd5EncryptionStr

{

constchar*cStr = [selfUTF8String];

unsignedchardigest[CC_MD5_DIGEST_LENGTH];

CC_MD5(cStr, (CC_LONG)strlen(cStr), digest);// This is the md5 call

NSMutableString*output = [NSMutableStringstringWithCapacity:CC_MD5_DIGEST_LENGTH*2];

for(inti =0; i

[outputappendFormat:@"%02x", digest[i]];

returnoutput;

}

- (NSString*) ConanSha1EncryptionStr

{

constchar*cstr = [selfcStringUsingEncoding:NSUTF8StringEncoding];

NSData*data = [NSDatadataWithBytes:cstrlength:self.length];

uint8_tdigest[CC_SHA1_DIGEST_LENGTH];

CC_SHA1(data.bytes, (unsignedint)data.length, digest);

NSMutableString*output = [NSMutableStringstringWithCapacity:CC_SHA1_DIGEST_LENGTH*2];

for(inti=0; i

[outputappendFormat:@"%02x", digest[i]];

}

returnoutput;

}

- (NSString*)ConanMd5HashOfPath:(NSString*)path

{

NSFileManager*fileManager = [NSFileManagerdefaultManager];

// Make sure the file exists

if( [fileManagerfileExistsAtPath:pathisDirectory:nil] )

{

NSData*data = [NSDatadataWithContentsOfFile:path];

unsignedchardigest[CC_MD5_DIGEST_LENGTH];

CC_MD5( data.bytes, (CC_LONG)data.length, digest );

NSMutableString*output = [NSMutableStringstringWithCapacity:CC_MD5_DIGEST_LENGTH*2];

for(inti =0; i

{

[outputappendFormat:@"%02x", digest[i]];

}

returnoutput;

}

else

{

return@"";

}

}

- (NSString*)ConanShaHashOfPath:(NSString*)path

{

NSFileManager*fileManager = [NSFileManagerdefaultManager];

// Make sure the file exists

if( [fileManagerfileExistsAtPath:pathisDirectory:nil] )

{

NSData*data = [NSDatadataWithContentsOfFile:path];

unsignedchardigest[CC_SHA1_DIGEST_LENGTH];

CC_SHA1( data.bytes, (CC_LONG)data.length, digest );

NSMutableString*output = [NSMutableStringstringWithCapacity:CC_SHA1_DIGEST_LENGTH*2];

for(inti =0; i

{

[outputappendFormat:@"%02x", digest[i]];

}

returnoutput;

}

else

{

return@"";

}

}

因項(xiàng)目中涉及到校驗(yàn)算法桶蝎,在這md5和sha1的字符串校驗(yàn)和文件校驗(yàn)都已實(shí)現(xiàn)。

在此感謝萬(wàn)能的互聯(lián)網(wǎng)谅畅,本文僅作學(xué)習(xí)交流使用,禁止任何形式的轉(zhuǎn)載和商業(yè)用途登渣。

請(qǐng)勿用于商業(yè)及非法用途,如由此引起的相關(guān)法律法規(guī)責(zé)任毡泻,與我們無(wú)關(guān)胜茧!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仇味,隨后出現(xiàn)的幾起案子呻顽,更是在濱河造成了極大的恐慌,老刑警劉巖邪铲,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芬位,死亡現(xiàn)場(chǎng)離奇詭異无拗,居然都是意外死亡带到,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)揽惹,“玉大人被饿,你說(shuō)我怎么就攤上這事√虏” “怎么了狭握?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)疯溺。 經(jīng)常有香客問(wèn)我论颅,道長(zhǎng),這世上最難降的妖魔是什么囱嫩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任恃疯,我火速辦了婚禮,結(jié)果婚禮上墨闲,老公的妹妹穿的比我還像新娘今妄。我一直安慰自己,他們只是感情好鸳碧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布盾鳞。 她就那樣靜靜地躺著,像睡著了一般瞻离。 火紅的嫁衣襯著肌膚如雪腾仅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天套利,我揣著相機(jī)與錄音攒砖,去河邊找鬼。 笑死日裙,一個(gè)胖子當(dāng)著我的面吹牛吹艇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昂拂,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼受神,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了格侯?” 一聲冷哼從身側(cè)響起鼻听,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎联四,沒(méi)想到半個(gè)月后撑碴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朝墩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年醉拓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亿卤,死狀恐怖愤兵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情排吴,我是刑警寧澤秆乳,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站钻哩,受9級(jí)特大地震影響屹堰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜街氢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一双藕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阳仔,春花似錦忧陪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至评矩,卻和暖如春叶堆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斥杜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工虱颗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔗喂。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓忘渔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缰儿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畦粮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容