2.密碼學(xué)之HASH&對稱加密

HSAH

Hash绢记,一般翻譯做“散列”令杈,也有直接音譯為“哈戏畏酰”的匀借,就是把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值平窘。

簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)


Hash的特點(diǎn)

?算法是公開的

?對相同數(shù)據(jù)運(yùn)算,得到的結(jié)果是一樣的

?對不同數(shù)據(jù)運(yùn)算,如MD5得到的結(jié)果默認(rèn)是128位,32個(gè)字符(16進(jìn)制標(biāo)識(shí))吓肋。

?這玩意沒法逆運(yùn)算(32個(gè)字符所能表達(dá)的數(shù)據(jù)是不定長的,散列碰撞)

?信息摘要瑰艘,信息“指紋”是鬼,是用來做數(shù)據(jù)識(shí)別的。


加密方式

非對稱加密 : RSA

對稱加密 : DES 紫新、 3DES 均蜜、AES

HASH: MD5 、 SHA1 / SHA256


用途

?用戶密碼的加密

?搜索引擎

?版權(quán) (相似的文件的hash值不同芒率,可視為正版盜版的一個(gè)判定依據(jù)囤耳,同個(gè)文件改文件名或類型或copy后,hash值并不發(fā)生改變偶芍,只有改變二進(jìn)制排列才會(huì)產(chǎn)生變化)

?數(shù)字簽名


HASH加密方式:

1.加鹽 壞處:鹽一旦泄露 就不安全了充择,鹽是寫死的。

2.HMAC加密方案

使用一個(gè)密鑰加密匪蟀,并且做了兩次散列椎麦,?在實(shí)際開發(fā)中,密鑰來自于服務(wù)器

- (NSString*)hmacMD5StringWithKey:(NSString*)key {}

例如用戶注冊登錄:

注冊時(shí)先把賬號(hào)發(fā)給服務(wù)器匹配賬號(hào)是否可以使用材彪,可以使用后隨機(jī)生成key密鑰观挎,然后將密鑰發(fā)給客戶端撒桨,客戶端拿到key值后再進(jìn)行HMAC加密,加密之后得到的HASH值發(fā)給服務(wù)器键兜。

如果換了設(shè)備登錄的話凤类,就找服務(wù)器要對應(yīng)賬號(hào)的key,輸入密碼用key進(jìn)行HMAC加密,然后將加密的結(jié)果發(fā)給服務(wù)器驗(yàn)證普气,驗(yàn)證成功后登錄成功谜疤,將key保存在本地,沒有登錄成功將key刪除现诀。

加一步:如果設(shè)備開啟了授權(quán)設(shè)備鎖夷磕,那么向服務(wù)器索要key的時(shí)候會(huì)向已授權(quán)設(shè)備發(fā)送驗(yàn)證, 授權(quán)設(shè)備允許后將key給與新的設(shè)備仔沿。

漏洞:不需要獲得用戶的真實(shí)密碼坐桩,直接將加密后的md5值發(fā)送給服務(wù)器,一樣可以登錄封锉。

HMAC

升級(jí)后HMAC加密:

在生成的 HMAC哈希值 的后面添加一個(gè)當(dāng)前時(shí)間的字符串(可能是當(dāng)前的年月日時(shí)分)绵跷,在求一次md5,然后發(fā)送給服務(wù)器成福,服務(wù)器驗(yàn)證?HMAC哈希值 加上當(dāng)前的時(shí)間的字符串(有時(shí)加上上一分鐘的字符創(chuàng))進(jìn)行md5運(yùn)算碾局,這樣這個(gè)值的有效期在1分鐘到1分鐘59秒之間。

這樣的好處是每次加密的結(jié)果都不一樣奴艾,這個(gè)時(shí)間戳是服務(wù)器給的净当。

密碼加密方式

?直接使用MD5

?MD5加鹽

?HMAC加密方案

?添點(diǎn)東西

源代碼


?#define CC_MD5_DIGEST_LENGTH? ? 16? ? ? ? ? /* digest length in bytes */ 16個(gè)字節(jié),16*8 = 128位的二進(jìn)制

? ? constchar*str =self.UTF8String;//加密數(shù)據(jù)的指針

? ? uint8_t buffer[CC_MD5_DIGEST_LENGTH];//加密數(shù)據(jù)的長度蕴潦,

? ? CC_MD5(str, (CC_LONG)strlen(str), buffer);像啼、

? ? return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];


循環(huán)遍歷,變成16進(jìn)制 02x的表現(xiàn)形式

數(shù)字簽名

將原始數(shù)據(jù)的hash值用RSA進(jìn)行加密潭苞,發(fā)給服務(wù)器的將是原始數(shù)據(jù)和用RSA加密后的hash值忽冻,然后服務(wù)器解密,對比原始數(shù)據(jù)進(jìn)行相同算法的hash值萄传,如果匹配說明數(shù)據(jù)沒有被修改過甚颂,這就叫做數(shù)字簽名蜜猾。

代碼簽名


對稱加密

對稱加密方式:明文通過密鑰加密得到密文秀菱。密文通過密鑰解密得到明文。

常見算法

?DES? ? 數(shù)據(jù)加密標(biāo)準(zhǔn)(用得少蹭睡,因?yàn)閺?qiáng)度不夠)

?3DES? 使用3個(gè)密鑰衍菱,對相同的數(shù)據(jù)執(zhí)行3次加密,強(qiáng)度增強(qiáng)

?AES? 高級(jí)密碼標(biāo)準(zhǔn)肩豁。(鑰匙串訪問)

應(yīng)用模式

?ECB(Electronic Code Book):電子密碼本模式脊串。每一塊數(shù)據(jù)辫呻,獨(dú)立加密

?最基本的加密模式琼锋,也就是通常理解的加密放闺,相同的明文將永遠(yuǎn)加密成相同的密文,無初始向量缕坎,容易受到密碼本重放攻擊怖侦,一般情況下很少用。

?CBC(Cipher Block Chaining):密碼分組鏈接模式谜叹。使用一個(gè)密鑰和一個(gè)初始化向量[IV]對數(shù)據(jù)執(zhí)行加密匾寝。加密解密都會(huì)依賴前一塊數(shù)據(jù)。(防竊聽的技術(shù))

?明文被加密前要與前面的密文進(jìn)行異或運(yùn)算后再加密荷腊,因此只要選擇不同的初始向量艳悔,相同的密文加密后會(huì)形成不同的密文,這是目前應(yīng)用最廣泛的模式女仰。CBC加密后的密文是上下文相關(guān)的猜年,但明文的錯(cuò)誤不會(huì)傳遞到后續(xù)分組,但如果一個(gè)分組丟失疾忍,后面的分組將全部作廢(同步錯(cuò)誤)码倦。

?CBC可以有效的保證密文的完整性,如果一個(gè)數(shù)據(jù)塊在傳遞是丟失或改變锭碳,后面的數(shù)據(jù)將無法正常解密袁稽。

$ openssl enc -des-ecb -k -616263 -nosalt -in message.txt -out msg1.bin? (用ecb進(jìn)行加密)

$ openssl enc -des-cbc -iv 0102030405060708 -k 616263 -nosalt -in message.txt -out msg4.bin? (用cbc進(jìn)行加密)

xxd msg1.bin? (查看)

- k 616263 傳遞的就是二進(jìn)制 (abc)


OpenSSL


終端命令:

?加密:

?AES(ECB)加密“hello”字符串

$ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64

?AES(CBC)加密“hello”字符串

$ echo -n hello | openssl enc -aes-128-cbc -K 616263 -nosalt -iv 0102030405060708 | base64

?解密:

?AES(ECB)解密

?$ echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt -d

?AES(CBC)解密

$ echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -K 616263 -iv 0102030405060708 -nosalt -d

代碼

需要導(dǎo)入 EncryptionTools.h

iv (初始化向量)有值就是cbc, 無值就是ecb,返回的結(jié)果是個(gè)base的字符串

加密解密都是它 -- CCCrypt? 參數(shù)說明

? ? CCCrypt(<#CCOperation op#>, <#CCAlgorithm alg#>, <#CCOptions options#>, <#const void *key#>, <#size_t keyLength#>, <#const void *iv#>, <#const void *dataIn#>, <#size_t dataInLength#>, <#void *dataOut#>, <#size_t dataOutAvailable#>, <#size_t *dataOutMoved#>)

?? ? 1、kCCEncrypt 加密/kCCDecrypt 解密

?? ? 2擒抛、加密算法推汽。

?? ? 3、加密選項(xiàng):ECB/CBC

?? ? 4歧沪、加密的密鑰

?? ? 5歹撒、密鑰的長度

?? ? 6、iv 初始化向量

?? ? 7诊胞、加密的數(shù)據(jù)

?? ? 8暖夭、加密的數(shù)據(jù)長度

?? ? 9、密文的內(nèi)存地址

?? ? 10撵孤、密文緩沖區(qū)的大小

?? ? 11迈着、加密結(jié)果大小

弊端:可以 symbolic 斷點(diǎn)斷住?CCCrypt 函數(shù)

函數(shù)調(diào)用的參數(shù)存在cpu的寄存器中

register read x6? ?(x6 是因?yàn)榈?個(gè)參數(shù)是加密的數(shù)據(jù))

p (char *)0x00000001c000ec20? ? (顯示加密的數(shù)據(jù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邪码,隨后出現(xiàn)的幾起案子裕菠,更是在濱河造成了極大的恐慌,老刑警劉巖闭专,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奴潘,死亡現(xiàn)場離奇詭異旧烧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)画髓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門掘剪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奈虾,你說我怎么就攤上這事杖小。” “怎么了愚墓?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵予权,是天一觀的道長。 經(jīng)常有香客問我浪册,道長扫腺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任村象,我火速辦了婚禮笆环,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厚者。我一直安慰自己躁劣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布库菲。 她就那樣靜靜地躺著账忘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熙宇。 梳的紋絲不亂的頭發(fā)上鳖擒,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音烫止,去河邊找鬼蒋荚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛馆蠕,可吹牛的內(nèi)容都是我干的期升。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼互躬,長吁一口氣:“原來是場噩夢啊……” “哼播赁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吨铸,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤行拢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后诞吱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舟奠,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年房维,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沼瘫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咙俩,死狀恐怖耿戚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阿趁,我是刑警寧澤膜蛔,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站脖阵,受9級(jí)特大地震影響皂股,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜命黔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一呜呐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悍募,春花似錦蘑辑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喜鼓,卻和暖如春忧设,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颠通。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工址晕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顿锰。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓谨垃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親硼控。 傳聞我的和親對象是個(gè)殘疾皇子刘陶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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

  • 在介紹加密算法之前, 先介紹一下 base64: 0. base64 Base64要求把每三個(gè)8Bit的字節(jié)轉(zhuǎn)換為...
    reboot_q閱讀 12,752評論 3 8
  • HASH的簡單介紹: Hash,一般也被稱為散列,是一種通過算法將一段任意的輸入轉(zhuǎn)化成一個(gè)固定長度(通常是128個(gè)...
    SharaYuki閱讀 1,806評論 0 5
  • 1、簡介對稱加密算法又稱傳統(tǒng)加密算法牢撼。加密和解密使用同一個(gè) 密鑰匙隔。 1.1對稱加密算法示例密鑰:X加密算法:每個(gè)字...
    6ffd6634d577閱讀 2,999評論 0 2
  • 對稱加密 - 傳統(tǒng)加密算法##加密和解密使用同一個(gè)"密鑰"!密鑰的保密工作就非常的重要!! 密鑰會(huì)定期更換!密鑰的...
    Maple_Xu閱讀 1,255評論 0 3
  • 這個(gè)周末,爸爸出差熏版,我留下來陪你纷责。感覺你好忙捍掺,要上外教課,數(shù)學(xué)課再膳,要打籃球挺勿,要完成學(xué)校作業(yè),還要搗鼓自己的事喂柒,還要...
    朱茱俠閱讀 220評論 0 0