密碼學(xué)

使用時(shí)導(dǎo)入 #import <CommonCrypto/CommonCrypto.h>頭文件,才能使用。

總共分為三大類;

一、哈希(散列函數(shù))算法

算法公開

對(duì)不同的數(shù)據(jù)加密結(jié)果是定長(zhǎng)的 32位字符!!(所能表示的個(gè)數(shù)是不是有限的)

信息摘要(加密之后的數(shù)據(jù)是不可逆!!)

哈希的破解!!

散列碰撞:就是找出兩個(gè)不同的數(shù)據(jù),加密之后得到相同的結(jié)果??!

使用的說明

比方說:用戶隱私數(shù)據(jù)!! 絕對(duì)不能允許明文傳遞?。?需要加密! —哈希算法)
服務(wù)器是不知道用戶的真實(shí)密碼!!(當(dāng)用戶注冊(cè)時(shí),通過哈希算法獲得32位字符,登錄時(shí)對(duì)比兩個(gè)的32位字符) —2010年之前的找回密碼功能!,2010年之后不能找回真實(shí)密碼。
網(wǎng)絡(luò)傳輸數(shù)據(jù)—登錄(用戶密碼)

進(jìn)行加密的處理方法:

1.直接MD5加密

2.加鹽處理 — 早起的使用!!(就是定義一個(gè)復(fù)雜的字符串) (密碼 + 鹽).md5

鹽:固定寫死的?。懰涝诔绦蚶锩娴模?!一旦鹽泄漏就不安全了

3. ——HMAC處理(更加的安全) 用一個(gè)密鑰加密,然后做兩次散列。

在實(shí)際開發(fā)中,這個(gè)KEY是密鑰,這個(gè)密鑰是從服務(wù)器獲取的
QQ的設(shè)備鎖,使用的就是HMAC

HASH代表的算法

1. MD5(查詢MD5值的網(wǎng)站:www.cmd5.com) (信息指紋)

一般用來(lái)做密碼加密!!
版權(quán)問題!!(MD5值對(duì)比)
搜索引擎:
搜索內(nèi)容分別為:iOS haha 和 haha iOS ,搜索到的結(jié)果是一樣的,怎么辦到的?

   (終端上使用命令:md5 - s “iOS”,獲取MD5值)
    iOS的MD5值:1bdf605991920db11cbdf8508204c4eb
    hank的MD5值:b6dfea72ba631c88abe4a1d17114bfcf
(iOS和hank的MD5值進(jìn)行位運(yùn)算得到的結(jié)果,就是兩個(gè)搜索到的結(jié)果一樣)

百度云&360云盤??!秒傳!!服務(wù)器上只要有這個(gè)文件,那么用戶可以實(shí)現(xiàn)秒傳!!。核心就是對(duì)比文件MD5的值。

2.SHA 512/256

和MD5差不多

3.HMAC

hamc的使用過程(登錄過程)


hmac算法.png

優(yōu)化的最終使用方案(加入時(shí)間戳)


hmac算法最新.png

以下兩種加密算法都是可逆的!

*明文->加密->密文
*密文->加密->明文

二、對(duì)稱加密算法 (enc)

  加密和解密使用同一個(gè)”密鑰”!??!
  密鑰的保密工作非常重要??!密鑰一般會(huì)定期更換!密鑰管理非常麻煩!!

經(jīng)典算法

  • DES 數(shù)據(jù)加密標(biāo)準(zhǔn)(用的少,因?yàn)閺?qiáng)度不夠!)
  • 3DES 使用3個(gè)密鑰,對(duì)相同的數(shù)據(jù)執(zhí)行三次加密,強(qiáng)度增強(qiáng)(更加用的少)
  • AES 高級(jí)密碼標(biāo)準(zhǔn),目前美國(guó)國(guó)家安全局使用的就是AES!!破解需要2000萬(wàn)年!!

對(duì)稱加密算法有兩種加密方式!!

ECB&CBC (cbc比ecb更加安全)

*ECB:電子代碼本,就是說每一個(gè)數(shù)據(jù)塊都是獨(dú)立加密的
*CBC:密碼塊鏈,使用一個(gè)密鑰和一個(gè)”初始化向量(IV)(8個(gè)字節(jié))”對(duì)數(shù)據(jù)執(zhí)行加密轉(zhuǎn)換!(每一個(gè)獨(dú)立塊都是有聯(lián)系的)。如果在傳輸數(shù)據(jù)的過程中,一個(gè)數(shù)據(jù)塊被破壞了,那么整個(gè)數(shù)據(jù)都沒法解密了!!

   終端使用openssl進(jìn)行ECB加密
 openssl enc -des-ecb -K 616263 -nosalt -in abc.txt -out msg1.bin
//CBC加密
openssl enc - des-cbc - iv 0102030405060708 - K616263(abc) -nosalt -in abc.txt - out msg3.bin
查看使用命令 xxd msg3.bin
 終端測(cè)試指令
/**
 *  終端測(cè)試指令
 *
 *  DES(ECB)加密
 *  $ echo -n hello | openssl enc -des-ecb -K 616263 -nosalt | base64
 *
  * DES(CBC)加密
 *  $ echo -n hello | openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
 *
 *  AES(ECB)加密
 *  $ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64
 *
 *  AES(CBC)加密
 *  $ echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
 *
 *  DES(ECB)解密
 *  $ echo -n HQr0Oij2kbo= | base64 -D | openssl enc -des-ecb -K 616263 -nosalt -d
 *
 *  DES(CBC)解密
 *  $ echo -n alvrvb3Gz88= | base64 -D | openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt -d
 *
 *  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 -iv 0102030405060708 -K 616263 -nosalt -d
 *
 *  提示:
 *      1> 加密過程是先加密,再base64編碼
 *      2> 解密過程是先base64解碼,再解密
 */
    舉例加密字符串:hello
    1.AEC - ECB加密
     終端命令: echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64
    解釋命令: echo -n hello是輸出hello結(jié)果,|是管道,將左邊的值賦值給右邊 , openssl enc -aes-128-ecb -K 616263 -nosalt:通過openssl這個(gè)工具進(jìn)行對(duì)稱加密算法的aes,128是加密強(qiáng)度,ecb的加密方式, K是key,616263(ASCII碼):就是abc,nosalt:不加鹽。將加密的二進(jìn)制文件通過管道進(jìn)行base64編碼。
  
     2.AEC - ECB解密  base64 -D:解碼
 終端命令:echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt -d

如何查看ASCII碼,需要的字符串保存到txt文件中,然后終端cd到這個(gè)存放這個(gè)txt文件下,然后使用命令:xxd +txt文件名,回車,就可以看到ASCII碼(其實(shí)就是十六進(jìn)制)

三、非對(duì)稱加密算法(RSA) — 現(xiàn)在加密算法

只能通過因式分解進(jìn)行破解??!

公鑰和私鑰

  • 使用公鑰加密,私鑰解密
  • 使用私鑰加密,公鑰解密
  生成私鑰的命令 :openssl genrsa -out private.pem 512
  通過私鑰生成公鑰的命令:openssl rsa -in private.pem -out public.pem -pubout
查看公鑰和私鑰的命令 cat private.pem/public.pem

將生成的私鑰輸入成txt文本形式
命令: openssl rsa -in private.pem -text -out private.txt

對(duì)rsa的使用案例

數(shù)字簽名
從客戶端往服務(wù)器發(fā)送數(shù)據(jù)報(bào)文,對(duì)數(shù)據(jù)進(jìn)行一次HSAH算法,得到32位字符,對(duì)MD5進(jìn)行RSA公鑰加密(數(shù)字簽名),然后數(shù)字報(bào)文和數(shù)字簽名后的字符進(jìn)行打包發(fā)送。服務(wù)器拿到數(shù)據(jù)包后,先對(duì)數(shù)據(jù)報(bào)文進(jìn)行HSAH算法,得到32位字符,然后在使用私鑰對(duì)數(shù)字簽名的數(shù)據(jù)進(jìn)行解密,得到32位的字符,然后對(duì)比兩個(gè)32位字符,如果不一樣說明數(shù)據(jù)被串改了,那么數(shù)據(jù)沒有被串改。


數(shù)字簽名圖.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容