開發常用到的幾種加密方式


有時候我們經常會聽到一些加密方式 最常見的就是Base64和MD5  這里分享一下平時看到的介紹和心得

1.Base64

編碼的思想是是采用64個基本的ASCII碼字符對數據進行重新編碼。它將需要編碼的數據拆分成字節數組。以3個字節為一組。按順序排列24位數據,再把這24位數據分成4組,即每組6位。再在每組的的最高位前補兩個0湊足一個字節。這樣就把一個3字節為一組的數據重新編碼成了4個字節。當所要編碼的數據的字節數不是3的整倍數,也就是說在分組時最后一組不夠3個字節。這時在最后一組填充1到2個0字節。並在最后編碼完成后在結尾添加1到2個“=”。例:將對ABC進行BASE64編碼首先取ABC對應的ASCII碼值。A(65)B(66)C(67)。再取二進制值A(01000001)B(01000010)C(01000011),然后把這三個字節的二進制碼接起來(010000010100001001000011),再以6位為單位分成4個數據塊並在最高位填充兩個0后形成4個字節的編碼后的值(00010000)(00010100)(00001001)(00000011)。藍色部分為真實數據。再把這四個字節數據轉化成10進制數得(16)(20)(19)(3)。最后根據BASE64給出的64個基本字符表,查出對應的ASCII碼字符(Q)(U)(J)(D)。這里的值實際就是數據在字符表中的索引。數據加密之后,數據量會變大,變大 1/3 左右.[data base64EncodedDataWithOptions:0] 加密成二進制數據

解碼過程就是把4個字節再還原成3個字節再根據不同的數據形式把字節數組重新整理成數據.

2.MD5

MD5的全稱是Message-DigestAlgorithm 5,Message-Digest泛指字節串(Message)的Hash變換,就是把一個任意長度的字節串變換成一定長的大整數。請注意我使用了"字節串"而不是"字符串"這個詞,是因為這種變換只與字節的值有關,與字符集或編碼方式無關。 MD5將任意長度的"字節串"變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。

MD5還廣泛用於加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的,用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然后再去和系統中保存的MD5值進行比較,而系統並不"知道"用戶的密碼是什么。

加密方式

 

    NSString *password = @"zhang";

 

    password = [password md5String];

 單純的 MD5加密是不安全的,因此要用到 MD5加鹽的方式 

拼接鹽值

 

password = [password stringByAppendingString:salt];也就是可以任意拼接東西在后面

 

2.3 時間戳/動態密碼

 

1> 實現目標

 

用戶的密碼是一定的,但是每次發送給網絡的密碼都不同.相同的密碼相同的加密算法,每次獲得的值不同.客戶端和服務器端的時間是相同的.

 

2> 原理

 

客戶端和服務器端依時間為基准采用相同的加密算法

 

3> 實現細節

 

客戶端和服務器端要求時間一致

時間精度越高,越安全

客戶端:發送網絡請求的時候依當前時間為基准進行加密.

服務器端:以接收到時間為基准進行加密.還要以接收到的時間的前一分鍾時間為基准進行加密.

服務器端:判斷這兩次的密碼和客戶端發送的密碼是否一致.  現在蘋果的開發者平台就用了這個技術進行加密 總是要獲取動態密碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM