MD5:首先,md5不是加密。
md5是摘要算法,主要是用來做認證,利用自身優勢(不可逆、低碰撞率)解決公開網絡中交換密鑰、認證的問題,
MD5相當於超損壓縮,在計算過程中原文的部分信息會丟失。
MD5為什么不可逆?例子:
快點贊啊親
加密規則:
每個字取拼音聲調+筆畫數,最后的結果計算乘積,為了也使得我的結果始終保持在一個限定范圍內,取最后結果取其與2^14=16384的余數(隨便取的,你們就當我有二進制強迫症吧)
如 快 是7畫,4聲,也就是“特征值11”,以此類推 點9+3=12 贊16+4=20 啊10+4=14 親9+1=10
最后我發明的不可逆函數值就是
11*12*20*14*10=26400與16384的余數,也就是10016
如果單單給10016這個數字和加密算法,你是無論如何不可能推倒出原文是“快點贊啊親”的,不過如果給你“快點贊啊親”你卻很容易驗證答案是否正確。
簽名有什么用?例子:
Encryption是為了保護明文的隱私性(privacy),防止隱私泄漏。設想一對小青年Alice和Bob還在曖昧中,倆人偷偷摸摸地去約會吃飯,不想讓別人知道。Alice想告訴Bob今天約會時幾點去吃飯,但是不想讓其他任何人(可以抽象為以她的情敵Carol為代表的一切其他人)知道他倆的吃飯時間,這時候就用到加密。加密后解密者可以從密文(ciphertext)中恢復出明文(plaintext),也就是吃飯時間。
蘋果包裝了MD5加密的方法,使用起來十分的方便。
1、 導入頭文件
- #import<CommonCrypto/CommonDigest.h>
2、加密的方法:
- (NSString *) md5:(NSString *) input {
const char *cStr = [input UTF8String];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
NSString *str = @"123456";
NSString *result = [self md5:str];
NSLog(@"%@",result);
輸出的結果如圖所示: