這些天寫(xiě)的程序需要用到SHA512加密。
創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營(yíng)銷(xiāo)、軟文平臺(tái)等專(zhuān)業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專(zhuān)業(yè)設(shè)計(jì)制作為您帶來(lái)效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。
順帶著就實(shí)現(xiàn)了IOS的SHA1、SHA256、SHA384、SHA512,以及md加密,md5二次加密。寫(xiě)了個(gè)示例程序
[背景資料]
MD5即Message Digest Algorithm 5(信息-摘要算法 5),用于確保信息傳輸完整一致。是計(jì)算機(jī)廣泛使用的雜湊算法之一
SHA即Secure Hash Algorithm(安全散列算法) 是美國(guó)國(guó)家安全局 (NSA) 設(shè)計(jì),美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院 (NIST) 發(fā)布的一系列密碼散列函數(shù)。
示例程序截圖如下:

以上加密均未用到第三方類(lèi)庫(kù),實(shí)現(xiàn)都很簡(jiǎn)單(因?yàn)榭梢哉{(diào)用c/c++共享庫(kù)來(lái)調(diào)用),使用起來(lái)大體來(lái)說(shuō)只要在需要用到加密的方法里新添一個(gè)私有方法就可以了。
需要用到AES加密及base64加密的同學(xué)請(qǐng)繞道GTMbase64這個(gè)第三方類(lèi)庫(kù),封裝的很好了,百度搜一下下載下來(lái)就行。
項(xiàng)目源代碼見(jiàn)連接。
下面來(lái)講解一下核心代碼。
先#import<CommonCrypto/CommonDigest.h>
[32位md5常規(guī)加密]
想要實(shí)現(xiàn)32位md5加密(包括常規(guī)加密及二次加密)的同學(xué)只需要在當(dāng)前類(lèi)中添加一個(gè)私有方法:
//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"];就能得到加密過(guò)的字符串啦。
[16位md5常規(guī)加密]
想要實(shí)現(xiàn)16位加密?
很簡(jiǎn)單,提取md5散列中的16位就行!(復(fù)制以下代碼及上一段代碼到當(dāng)前類(lèi)中)
- (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"];就能得到加密過(guò)的字符串啦。
[32位md5二次加密]
更簡(jiǎn)單了,你只需要調(diào)用兩次32位md5常規(guī)加密就行……
類(lèi)似于這樣:
[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)于大小寫(xiě)]
常規(guī)轉(zhuǎn)換沒(méi)什么可說(shuō)的,
NSString *result = [selfgetMd5_32Bit_String:srcStringTextField.text]uppercaseString];
就是你要的答案。
二次轉(zhuǎn)換大寫(xiě)要特別注意,第一次轉(zhuǎn)換的結(jié)果要先轉(zhuǎn)成大寫(xiě),然后執(zhí)行常規(guī)轉(zhuǎn)換,然后再將結(jié)果轉(zhuǎn)成大寫(xiě),類(lèi)似于這樣:
[resultLabel2setText:[[selfgetMd5_32Bit_String:[[selfgetMd5_32Bit_String:srcStringTextField.text]uppercaseString]]uppercaseString]];
[sha1轉(zhuǎn)換]
同樣很簡(jiǎn)單。當(dāng)前類(lèi)添加私有方法:
//sha1加密方式
- (NSString *)getSha1String:(NSString *)srcString{
constchar *cstr = [srcStringcStringUsingEncoding: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個(gè)私有方法。
我直接貼出來(lái)。
//sha256加密方式
- (NSString *)getSha256String:(NSString *)srcString {
constchar *cstr = [srcStringcStringUsingEncoding: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 = [srcStringcStringUsingEncoding: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 = [srcStringcStringUsingEncoding: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;
}
有沒(méi)覺(jué)得差不多?實(shí)際上就是一樣樣的,只需要換掉CC_SHA1_DIGEST_LENGTH、CC_SHA256_DIGEST_LENGTH、CC_SHA384_DIGEST_LENGTH、CC_SHA512_DIGEST_LENGTH這個(gè)宏就可以了。
你需要用到哪一個(gè),就添加哪一個(gè)私有方法。調(diào)用即可。
[總結(jié)]
個(gè)人認(rèn)為sha加密和md5加密完全沒(méi)必要去導(dǎo)入第三方類(lèi)庫(kù),實(shí)際上調(diào)用共享庫(kù)以后就是一個(gè)私有方法幾行代碼的事,何必搞那么復(fù)雜呢?
需要用到AES加密及base64加密的同學(xué)請(qǐng)繞道GTMbase64這個(gè)第三方類(lèi)庫(kù),封裝的很好了,百度搜一下下載下來(lái)就行。
其他截圖:

有任何意見(jiàn)建議以及不懂的地方歡迎聯(lián)系作者:任碩
源代碼見(jiàn)附件:
文章名稱(chēng):IOS之sha加密、md5常規(guī)加密、md5二次加密詳解及示例程序
文章分享:http://chinadenli.net/article34/geipse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站排名、響應(yīng)式網(wǎng)站、用戶(hù)體驗(yàn)、軟件開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)