欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

IOS之sha加密、md5常規(guī)加密、md5二次加密詳解及示例程序-創(chuàng)新互聯(lián)

這些天寫的程序需要用到SHA512加密。

創(chuàng)新互聯(lián)公司長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為如皋企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,如皋網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

順帶著就實(shí)現(xiàn)了IOS的SHA1、SHA256、SHA384、SHA512,以及md加密,md5二次加密。寫了個示例程序

[背景資料]

MD5即Message Digest Algorithm 5(信息-摘要算法 5),用于確保信息傳輸完整一致。是計(jì)算機(jī)廣泛使用的雜湊算法之一
SHA即Secure Hash Algorithm(安全散列算法) 是美國國家安全局 (NSA) 設(shè)計(jì),美國國家標(biāo)準(zhǔn)與技術(shù)研究院 (NIST) 發(fā)布的一系列密碼散列函數(shù)。

示例程序截圖如下:

IOS之sha加密、md5常規(guī)加密、md5二次加密詳解及示例程序

以上加密均未用到第三方類庫,實(shí)現(xiàn)都很簡單(因?yàn)榭梢哉{(diào)用c/c++共享庫來調(diào)用),使用起來大體來說只要在需要用到加密的方法里新添一個私有方法就可以了。

需要用到AES加密及base64加密的同學(xué)請繞道GTMbase64這個第三方類庫,封裝的很好了,百度搜一下下載下來就行。

項(xiàng)目源代碼見連接。

下面來講解一下核心代碼。

先#import <CommonCrypto/CommonDigest.h>

[32位md5常規(guī)加密]

想要實(shí)現(xiàn)32位md5加密(包括常規(guī)加密及二次加密)的同學(xué)只需要在當(dāng)前類中添加一個私有方法:

//32位MD5加密方式

- (NSString *)getMd5_32Bit_String:(NSString *)srcString{

  constchar *cStr = [srcString UTF8String];

  unsignedchar digest[CC_MD5_DIGEST_LENGTH];

  CC_MD5( cStr, strlen(cStr), digest );

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

  for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)

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

  return result;

}

之后在需要用到加密的地方調(diào)用[self getMd5_32Bit_String:@"xxx"];就能得到加密過的字符串啦。

[16位md5常規(guī)加密]

想要實(shí)現(xiàn)16位加密?

很簡單,提取md5散列中的16位就行!(復(fù)制以下代碼及上一段代碼到當(dāng)前類中)

- (NSString *)getMd5_16Bit_String:(NSString *)srcString{

  //提取32位MD5散列的中間16位

  NSString *md5_32Bit_String=[selfgetMd5_32Bit_String:srcString];

  NSString *result = [[md5_32Bit_String substringToIndex:24] substringFromIndex:8];//即9~25位

  return result;

}

之后在需要用到加密的地方調(diào)用[self getMd5_16Bit_String:@"xxx"];就能得到加密過的字符串啦。

[32位md5二次加密]

更簡單了,你只需要調(diào)用兩次32位md5常規(guī)加密就行……

類似于這樣:

[resultLabel1setText:[selfgetMd5_32Bit_String:[selfgetMd5_32Bit_String:srcStringTextField.text]]];

[16位md5二次加密]

同上,調(diào)用兩次16位md5常規(guī)加密就行

[resultLabel1setText:[selfgetMd5_32Bit_String:[selfgetMd5_32Bit_String:srcStringTextField.text]]];

[關(guān)于大小寫]

常規(guī)轉(zhuǎn)換沒什么可說的,

NSString *result = [selfgetMd5_32Bit_String:srcStringTextField.text] uppercaseString];

就是你要的答案。

二次轉(zhuǎn)換大寫要特別注意,第一次轉(zhuǎn)換的結(jié)果要先轉(zhuǎn)成大寫,然后執(zhí)行常規(guī)轉(zhuǎn)換,然后再將結(jié)果轉(zhuǎn)成大寫,類似于這樣:

  [resultLabel2setText:[[selfgetMd5_32Bit_String:[[selfgetMd5_32Bit_String:srcStringTextField.text] uppercaseString]]uppercaseString]];

[sha1轉(zhuǎn)換]

同樣很簡單。當(dāng)前類添加私有方法:

//sha1加密方式

- (NSString *)getSha1String:(NSString *)srcString{

constchar *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];

NSData *data = [NSDatadataWithBytes:cstr length:srcString.length];

uint8_t digest[CC_SHA1_DIGEST_LENGTH];

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

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

for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {

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

  }

return result;

}

需要用到的地方

[resultLabel1setText:[selfgetSha1String:srcStringTextField.text]];

大功告成。

[sha256/sha384/sha512加密]

分別是3個私有方法。

我直接貼出來。

//sha256加密方式

- (NSString *)getSha256String:(NSString *)srcString {

constchar *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];

NSData *data = [NSDatadataWithBytes:cstr length:srcString.length];

uint8_t digest[CC_SHA256_DIGEST_LENGTH];

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

NSMutableString* result = [NSMutableStringstringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];

for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {

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

  }

return result;

}

//sha384加密方式

- (NSString *)getSha384String:(NSString *)srcString {

constchar *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];

NSData *data = [NSDatadataWithBytes:cstr length:srcString.length];

uint8_t digest[CC_SHA384_DIGEST_LENGTH];

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

NSMutableString* result = [NSMutableStringstringWithCapacity:CC_SHA384_DIGEST_LENGTH * 2];

for(int i = 0; i < CC_SHA384_DIGEST_LENGTH; i++) {

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

  }

return result;

}

//sha512加密方式

- (NSString*) getSha512String:(NSString*)srcString {

constchar *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];

NSData *data = [NSDatadataWithBytes:cstr length:srcString.length];

uint8_t digest[CC_SHA512_DIGEST_LENGTH];

CC_SHA512(data.bytes, data.length, digest);

NSMutableString* result = [NSMutableStringstringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];

for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)

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

return result;

}

有沒覺得差不多?實(shí)際上就是一樣樣的,只需要換掉CC_SHA1_DIGEST_LENGTH、CC_SHA256_DIGEST_LENGTH、CC_SHA384_DIGEST_LENGTH、CC_SHA512_DIGEST_LENGTH這個宏就可以了。

你需要用到哪一個,就添加哪一個私有方法。調(diào)用即可。

[總結(jié)]

個人認(rèn)為sha加密和md5加密完全沒必要去導(dǎo)入第三方類庫,實(shí)際上調(diào)用共享庫以后就是一個私有方法幾行代碼的事,何必搞那么復(fù)雜呢?

需要用到AES加密及base64加密的同學(xué)請繞道GTMbase64這個第三方類庫,封裝的很好了,百度搜一下下載下來就行。

其他截圖:

IOS之sha加密、md5常規(guī)加密、md5二次加密詳解及示例程序

有任何意見建議以及不懂的地方歡迎聯(lián)系作者:任碩

源代碼見附件:

附件:http://down.51cto.com/data/2363185

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

名稱欄目:IOS之sha加密、md5常規(guī)加密、md5二次加密詳解及示例程序-創(chuàng)新互聯(lián)
當(dāng)前URL:http://www.chinadenli.net/article18/dcdjdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管網(wǎng)頁設(shè)計(jì)公司小程序開發(fā)GoogleApp開發(fā)網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作