今天突然想起了base64編碼加密,然后就整理了一下,雖然用的不多,但了解多一點(diǎn)并無(wú)壞處~
一陪每、簡(jiǎn)介
是網(wǎng)絡(luò)上使用最廣泛的編碼系統(tǒng)催享,能夠?qū)⑷魏味M(jìn)制數(shù)據(jù)敢艰,轉(zhuǎn)換成只有65個(gè)字符組成的文本文件侦鹏。
由 az飒炎,AZ埋哟,0~9,+郎汪,/赤赊,=等65個(gè)字符組成。
Base64編碼后的結(jié)果能夠反算煞赢,不夠安全抛计。
Base64是所有現(xiàn)代加密算法的基礎(chǔ)算法。
二照筑、原理
參考文章:
http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html
? base64的編碼都是按字符串長(zhǎng)度吹截,以每3個(gè)8bit的字符為一組,
? 然后針對(duì)每組凝危,首先獲取每個(gè)字符的ASCII編碼波俄,
? 然后將ASCII編碼轉(zhuǎn)換成8bit的二進(jìn)制,得到一組3*8=24bit的字節(jié)
? 然后再將這24bit劃分為4個(gè)6bit的字節(jié)蛾默,并在每個(gè)6bit的字節(jié)前面都填兩個(gè)高位0懦铺,得到4個(gè)8bit的字節(jié)
? 然后將這4個(gè)8bit的字節(jié)轉(zhuǎn)換成10進(jìn)制,對(duì)照Base64編碼表,得到對(duì)應(yīng)編碼后的字符。
注:如果被編碼字符長(zhǎng)度不是3的倍數(shù)的時(shí)候支鸡,則都用0代替冬念,對(duì)應(yīng)的輸出字符為=
Base64對(duì)照表
三趁窃、終端命令
3、終端命令
將 abc.png 進(jìn)行 base64編碼急前,生成 xxx.txt 文件
$ base64 abc.png -o xxx.txt // -o 表示輸出
將 xxx.txt 解碼生成1.png
$ base64 -D xxx.txt -o 1.png // -D 表示 decoder 解碼
將字符串 ABC 進(jìn)行 base64 編碼
$ echo -n ABC | base64
將字符串 QUJD 解碼
$ echo -n QUJD | base64 -D
四棚菊、Base64代碼實(shí)現(xiàn)
1、修改代碼
保存密碼不能使用明文叔汁,使用base64進(jìn)行加密。
提交數(shù)據(jù)到服務(wù)器不能使用明文检碗,使用base64進(jìn)行加密据块。
#pragma mark - Base64
// 編碼:A => QQ==
-(NSString*)base64Encode:(NSString *)string{
//1.將字符串轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
//2.利用ios7.0的方法,直接 base64 編碼
return [data base64EncodedStringWithOptions:0];
}
// 解碼:QQ== => A
- (NSString*)base64Decode:(NSString *)string {
//1.將base64編碼后的字符串折剃,解碼成二進(jìn)制數(shù)據(jù)
//這里不能使用注釋掉的方法轉(zhuǎn)換成二進(jìn)制,因?yàn)?string 就是已經(jīng)編碼過(guò)的字符串
//NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];
//2.返回解碼的字符串
return [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
}