iOS sha1加密方法(哈希算法昔驱,用于校驗(yàn)數(shù)據(jù)完整性)以及字符串中含有漢字的情況的加密方法

最近在項(xiàng)目中使用到了網(wǎng)絡(luò)請求簽名認(rèn)證的方法,于是在網(wǎng)上找關(guān)于OC sha1加密的方法上忍,很快找到了一個大眾使用的封裝好的方法骤肛,以下代碼便是

首先需要添加頭文件
#import<CommonCrypto/CommonDigest.h>
然后直接使用下面的方法就可以了
//sha1加密方式
- (NSString *) sha1:(NSString *)input
{
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];
    
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(data.bytes, (unsigned int)data.length, digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    
    for(int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }
    return output;
}

我直接在項(xiàng)目中使用了這個方法,而且完美解決問題窍蓝,但是,今天重點(diǎn)說的是這個但是,在后期的項(xiàng)目修改中腋颠,需要加密的字符串里面增加了漢字(之前需要加密的字符串中無漢字),在這種情況下它抱,上面的方法就和服務(wù)器那邊的加密不一樣了(艱難的調(diào)試排除問題的過程不贅述);

最終發(fā)現(xiàn)的原因就是我這邊生成的加密字符串服務(wù)器那邊生成的不一樣秕豫,自然就會發(fā)生錯誤;錯誤的原因就是因?yàn)?code>加密的字符串中包含有漢字
然后是在網(wǎng)上查找观蓄,在<[主題:如何對中文字符串進(jìn)行sha1加密][id]>這個帖子中找到了方法,現(xiàn)貢獻(xiàn)給大家
[id]:http://www.cocoachina.com/bbs/read.php?tid=263440&page=e&#a

首先需要添加頭文件
#import<CommonCrypto/CommonDigest.h>
然后直接使用下面的方法就可以了
//sha1加密方式
- (NSString *) sha1:(NSString *)input
{
    //const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    //NSData *data = [NSData dataWithBytes:cstr length:input.length];
    
     NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
    
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    
    CC_SHA1(data.bytes, (unsigned int)data.length, digest);
    
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    
    for(int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }
    
    return output;
}

可以看出這個方法與第一個方法的區(qū)別混移,頭兩句注釋掉了,用

 NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];

代替了那兩句的作用侮穿;

帖子一樓bindbasic的原話是這樣的

用上面的方法中文字符串轉(zhuǎn)data時會造成數(shù)據(jù)丟失歌径,
把
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];  
    NSData *data = [NSData dataWithBytes:cstr length:input.length]; 

這兩句改成

NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
就可以了

經(jīng)實(shí)測,第二種方法的加密方式適用于純字符串以及帶有中文的字符串亲茅,推薦使用回铛,推薦使用,推薦使用?寺唷R鹚唷!(重要的事情說三遍)

備注:嚴(yán)格來說袭祟,sha1(安全[哈希算法])只是叫做一種算法验残,用于檢驗(yàn)數(shù)據(jù)完整性,并不能叫做加密~感謝2樓的指點(diǎn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巾乳,一起剝皮案震驚了整個濱河市您没,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胆绊,老刑警劉巖氨鹏,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異压状,居然都是意外死亡仆抵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肢础,“玉大人还栓,你說我怎么就攤上這事〈洌” “怎么了剩盒?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長慨蛙。 經(jīng)常有香客問我辽聊,道長,這世上最難降的妖魔是什么期贫? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任跟匆,我火速辦了婚禮,結(jié)果婚禮上通砍,老公的妹妹穿的比我還像新娘玛臂。我一直安慰自己,他們只是感情好封孙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虎忌,像睡著了一般泡徙。 火紅的嫁衣襯著肌膚如雪膜蠢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天挑围,我揣著相機(jī)與錄音,去河邊找鬼杉辙。 笑死模捂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奏瞬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼泉孩,長吁一口氣:“原來是場噩夢啊……” “哼硼端!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寓搬,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤珍昨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镣典,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兔毙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兄春。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澎剥。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赶舆,靈堂內(nèi)的尸體忽然破棺而出哑姚,到底是詐尸還是另有隱情,我是刑警寧澤芜茵,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布叙量,位于F島的核電站,受9級特大地震影響九串,放射性物質(zhì)發(fā)生泄漏绞佩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一猪钮、第九天 我趴在偏房一處隱蔽的房頂上張望品山。 院中可真熱鬧,春花似錦躬贡、人聲如沸谆奥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酸些。三九已至,卻和暖如春檐蚜,著一層夾襖步出監(jiān)牢的瞬間魄懂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工闯第, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留市栗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓咳短,卻偏偏與公主長得像填帽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咙好,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,796評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理篡腌,服務(wù)發(fā)現(xiàn),斷路器勾效,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法嘹悼,類相關(guān)的語法叛甫,內(nèi)部類的語法,繼承相關(guān)的語法杨伙,異常的語法其监,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 當(dāng)下的所有米蘭球迷,都是局促的膛腐。交易遲遲沒有官方,心就只能一直懸著哲身。我倒覺得,我們該拋下種種不安勘天,對或許要...
    Krystal11閱讀 196評論 0 1
  • 1:什么是block?block其實(shí)就是一個代碼塊商膊,把你想要執(zhí)行的代碼封裝在這個代碼塊里,等到需要的時候再去調(diào)用晕拆。...
    SDBridge閱讀 296評論 0 0