『導(dǎo)語』
在iOS開發(fā)中base64
如何用xcode
進(jìn)行編解碼秸抚?如何用終端
進(jìn)行編解碼
速和?我將用以下例子說明:(xcode代碼和終端命令下載)
- Base64簡單說明
分析 | 描述 |
---|---|
描述 | Base64可以成為密碼學(xué)的基石,非常重要 |
特點(diǎn) | 可以將任意的二進(jìn)制數(shù)據(jù)進(jìn)行Base64編碼 |
結(jié)果 | 所有的數(shù)據(jù)都能被編碼為并只用65個字符就能表示的文本文件剥汤。 |
65字符 |
A~Z a~z 0~9 + / = 對文件進(jìn)行base64編碼后文件數(shù)據(jù)的變化:編碼后的數(shù)據(jù)~=編碼前數(shù)據(jù)的4/3颠放,會大1/3左右。 |
-
已知:
**編碼 **:A
——> QQ==
解碼 : QQ==
——>A
-
終端命令
- 編碼:輸入
echo -n
A|base64
吭敢,再按回車鍵Enter
- 解碼:輸入
echo -n
QQ==|base64 -D
碰凶,再按回車鍵Enter
- 代碼
- 創(chuàng)建編碼
base64EncodeString:
方法 ; - 創(chuàng)建解碼
base64DecodeString:
方法;
//對一個str進(jìn)行base64編碼
-(NSString *)base64EncodeString:(NSString *)string
{
//1 str->data 字符串轉(zhuǎn)為二進(jìn)制數(shù)據(jù)
NSData *data = [string dataUsingEncoding:kCFStringEncodingUTF8];
//2 對二進(jìn)制數(shù)據(jù)進(jìn)行base64編碼,完成后返回字符串
return [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}
//解碼
-(NSString *)base64DecodeString:(NSString *) string
{
//1 轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)(注意:該字符串是base64編碼后的字符)
NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters];
//2 把二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為字符串
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
- 點(diǎn)擊時調(diào)用編解碼方法
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//str編碼base64 A (QQ== 其中==表示占位的0)
NSString *strBase64 = [self base64EncodeString:@"A"];
NSLog(@"strBase64 = %@",strBase64);
/*
2017-03-21 17:32:42.177 06-了解-加密相關(guān)[1410:198041] strBase64 = QQ==
*/
NSString *strUncodeBase64 = [self base64DecodeString:@"QQ=="];
NSLog(@"解碼 str = %@ ",strUncodeBase64);
/*
2017-03-22 12:09:27.527 06-了解-加密相關(guān)[714:38086] 解碼 str = A
*/
}
- 補(bǔ)充:
Base64
編碼原理- 1)將所有
字符
轉(zhuǎn)化為ASCII碼
; - 2)將
ASCII
碼轉(zhuǎn)化為8位二進(jìn)制
鹿驼; - 3)將
二進(jìn)制
3個歸成一組(不足3個在后邊補(bǔ)0
)共24位欲低,再拆分成4組,每組6位畜晰;(8位
變6位
) - 4)統(tǒng)一在
6位二進(jìn)制
前補(bǔ)兩
個0
湊足8位砾莱; - 5)將補(bǔ)0后的
二進(jìn)制
轉(zhuǎn)為十進(jìn)制
; - 6)從
Base64編碼表
獲取十進(jìn)制
對應(yīng)的Base64編碼凄鼻;
- 1)將所有
- 補(bǔ)充:處理過程說明:
- a.轉(zhuǎn)換的時候腊瑟,將三個byte的數(shù)據(jù),先后放入一個24bit的緩沖區(qū)中块蚌,先來的byte占高位闰非。
- b.數(shù)據(jù)不足3byte的話,于緩沖區(qū)中剩下的bit用0補(bǔ)足峭范。然后财松,每次取出6個bit,按照其值選擇查表選擇對應(yīng)的字符作為編碼后的輸出纱控。
- c.不斷進(jìn)行辆毡,直到全部輸入數(shù)據(jù)轉(zhuǎn)換完成政敢。
- d.如果最后剩下
兩個
輸入數(shù)據(jù),在編碼結(jié)果后加1
個“=
”胚迫; - e.如果最后剩下
一個
輸入數(shù)據(jù),編碼結(jié)果后加2個“=
”唾那; - f.如果沒有剩下任何數(shù)據(jù)访锻,就什么都不要加,這樣才可以保證資料還原的正確性闹获。