先說一下:MD5加密可破解,每一個原密碼
對應(yīng)一個不變的MD5加密的密碼
效果:
MD5加密demo 密碼: c1j2
一.簡述MD5:
1.MD5即Message-Digest Algorithm 5辫继,用于確保信息傳輸完整一致。是計算機(jī)廣泛使用的雜湊算法之一(又譯摘要算法滚躯、哈希算法)恍飘,主流編程語言普遍已有MD5實現(xiàn)诊杆。MD5的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節(jié)串變換成一定長的十六進(jìn)制數(shù)字串)船侧。(引用自百度百科)
2.MD5 不是一種加密算法蔬螟,只是用來做文件校驗的。比如官方發(fā)布一個軟件铁孵,同時公布一個MD5校驗碼锭硼。如果你下載下來的軟件,通過MD5校驗后蜕劝,和官方公布的不同檀头,就說明你這個軟件已經(jīng)被人修改過了,不是官方原版熙宇。MD5算法都是統(tǒng)一的鳖擒,沒有密鑰之類的東西溉浙。相同的字符串通過MD5轉(zhuǎn)碼后烫止,都能夠獲得相同的MD5碼。但是戳稽,MD5是一種摘要算法馆蠕,是不可逆的,但是網(wǎng)上在線可以解密期升,也就是說,通過MD5值不能還原原始數(shù)據(jù)互躬。加密播赁,解密之類的還是用DES/AES + BASE64之類的算法來實現(xiàn)。
二.MD5的用法
-
1.在Objective-C中我們怎么進(jìn)行MD5加密吼渡,首先我們需要包含頭文件是
#import <CommonCrypto/CommonDigest.h>
digest [da?'d??st] vt. 消化容为;吸收;融會貫通
crypto ['kript?u] adj. 秘密的寺酪,隱蔽的坎背,不公開的
-
2.其實用法跟簡單,就一個調(diào)用方法(兩種方法)
1.第一種
[self md5:@"要加密的東西" ]; //可以打印出來就是加密好的字符串,可以在線解密
- (NSString *)md5:(NSString *)str
{
const char *cStr = [str UTF8String];
unsigned char result[16];
CC_MD5(cStr, (CC_LONG)strlen(cStr), result); // This is the md5 call
return [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
}2.第二種
- (NSString *)md5HexDigest:(NSString*)password { const char *original_str = [password UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(original_str, strlen(original_str), result); NSMutableString *hash = [NSMutableString string]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { /* %02X是格式控制符:‘x’表示以16進(jìn)制輸出,‘02’表示不足兩位寄雀,前面補(bǔ)0得滤; */ [hash appendFormat:@"%02X", result[i]]; } NSString *mdfiveString = [hash lowercaseString]; return mdfiveString; }
1.char[16]和%02x的來歷:
其中%02x是格式控制符:‘x’表示以16進(jìn)制輸出,‘02’表示不足兩位盒犹,前面補(bǔ)0懂更;如‘f’輸出為0f,‘1f3’則輸出1f3;本來一般的都會介紹到這里就完了急膀,我想多介紹一下代碼中result是個字符數(shù)組沮协,那為什么是[16]呢,這是因為MD5算法最后生成的是128位卓嫂,而在計算機(jī)的最小存儲單位為字節(jié)皂股,1個字節(jié)是8位,對應(yīng)一個char類型命黔,計算可得需要16個char呜呐。所以result是[16]。那么為什么輸出的格式一定是%02x呢悍募,而不是其它呢蘑辑。這也是有原因的:因為約定MD5一般是以16進(jìn)制的格式輸出,那么其實這個問題就轉(zhuǎn)換為把128個0和1以16進(jìn)制來表示坠宴,每4位二進(jìn)制對應(yīng)一個16進(jìn)制的元素洋魂,則需要32個16進(jìn)制的元素,如果元素全部為0喜鼓,放到char的數(shù)組中副砍,正常是不會輸出,如00001111庄岖,以%x輸出豁翎,則是f,那么就會丟失0;但如果以%02x表示則輸出結(jié)果是0f隅忿,正好是轉(zhuǎn)換的正確結(jié)果心剥。(摘抄)
2.對于16位MD5加密的解釋
至于人們說的16位MD5加密邦尊,其實是這樣的:舉例如果產(chǎn)生的MD5加密字符串是:01234567abcdefababcdefab76543210,則16位的MD加密字符是abcdefababcdefab优烧,也就是只是截取了中間的16位蝉揍。實際上這個操作已經(jīng)不是MD5加密算法所包括的,而應(yīng)當(dāng)是對MD5加密算法結(jié)果的二次處理畦娄。其它的64位和大小寫什么的又沾,都屬于對MD5算法結(jié)果的二次處理。因為MD5算法產(chǎn)生的結(jié)果就是128bit熙卡,128個二進(jìn)制數(shù)字捍掺。
三.簡單介紹一下加密
*
1、簡單的概念
明文:加密前的信息
密文:機(jī)密后的信息
加密算法:加密或解密的算法
密鑰:算法使用的鑰匙(讀作miyao再膳,正確應(yīng)該是miyue挺勿,但是大家都讀miyao)
*
簡單的例子
將123456每位數(shù)字都加1后得到234567,
其中123456就是明文喂柒,234567就是密文不瓶,加密密鑰就是1,加密算法是每位加
* 2灾杰、加密算法種類
按照加密的方式我們可以將加密算法大體分成一下三種:
* 對稱加密算法(加密和解密算法是對稱的可能有點(diǎn)抽象你可以理解成同一把鑰匙)
* 非對稱加密算法(加密和解密算法是非對稱的可以理解成加密的時候是一把鑰匙解密的時候是一把鑰匙蚊丐,典型的就是rsa公鑰和私鑰)
* 經(jīng)典哈希算法(哈希算法是一種散列算法,有個特殊性是它是不可逆只能通過窮舉法超大量的計算才可能算出艳吠,一般幾率很小麦备,還有就是你同一段的明文兩次加密出來的結(jié)果是不一樣的)
*
* 3、算法舉例
* 對稱加密算法:DES算法昭娩,3DES算法凛篙,TDEA算法,Blowfish算法栏渺,RC5算法呛梆,IDEA算法,AES算法磕诊。
* 非對稱加密算法:RSA填物、Elgamal、背包算法霎终、Rabin滞磺、D-H、ECC莱褒。
* 經(jīng)典的哈希算法:MD2击困、MD4、MD5 和 *
* SHA-1(目的是將任意長輸入通過算法變?yōu)楣潭ㄩL輸出保礼,且保證輸入變化一點(diǎn)輸出都不同沛励,且不能反向解密)
* 4、 今天我們來說一下我們在來發(fā)中常用的算法暫時只講:MD5炮障、Base64目派、sha、AES胁赢、rsa
* 補(bǔ)充:RSA加密算法中比較重要的加密算法
* 非對稱加密算法可能是世界上最重要的算法企蹭,它是當(dāng)今電子商務(wù)等領(lǐng)域的基石。簡而言之智末,非對稱加密就是指加密公鑰和解密密鑰是不同的谅摄,而且加密公鑰和解密密鑰是成對出現(xiàn)。非對稱加密又叫公鑰加密系馆,也就是說成對的密鑰送漠,其中一個是對外公開的,所有人都可以獲得由蘑,人們稱之為公鑰闽寡;而與之相對應(yīng)的稱為私鑰,只有這對密鑰的生成者才能擁有尼酿。
* 對于一個私鑰爷狈,有且只有一個與之對應(yīng)的公鑰。公鑰公開給任何人裳擎,私鑰通常是只有生成者擁有涎永。公/私鑰通常是1024位或者2048位,越長安全系數(shù)越高鹿响,但是解密越困難羡微。盡管拿到了公鑰,如果沒有私鑰惶我,要想解密那幾乎是不可能的拷淘,至少現(xiàn)在在世界上還沒有人公開出來說成功解密的。
* 5. 先移動端給服務(wù)器傳遞通過RSA公鑰加密后的數(shù)據(jù),參數(shù)包括DES的密鑰(密鑰是隨機(jī)生成的八位字符串) 和 相關(guān)參數(shù)信息指孤,服務(wù)器通過私鑰解密信息數(shù)據(jù)启涯,里面包括DES密鑰和 相關(guān)參數(shù)信息,服務(wù)器再通過此DES密鑰加密返回數(shù)據(jù)給移動端恃轩,移動端通過此DES密鑰進(jìn)行解密獲取數(shù)據(jù)结洼。
* 優(yōu)點(diǎn):因為RSA不容易解密,即使被攔截解密了叉跛,獲取了DES的密鑰松忍,因為DES的密鑰是隨機(jī)生成的,也只能解密這一次的數(shù)據(jù)信息筷厘,不會對其他數(shù)據(jù)信息產(chǎn)生影響鸣峭。(注:DES的密鑰每一次都要重新隨機(jī)生成宏所,也就是一個密鑰只完成這一次的數(shù)據(jù)傳遞)
* 總結(jié):公鑰和密鑰成對出現(xiàn),其中公鑰負(fù)責(zé)加密 摊溶,私鑰負(fù)責(zé)解密
*
*/
四.在線的加密和解密
- 1 MD5在線加密
記得點(diǎn)喜歡哦!!!嘿嘿