什么是base64清焕?
base64是一種用64個字符串來表示任意二進制數(shù)據(jù)的方法并蝗。這是一種可逆的編碼方式
base64的原理:
編碼后的數(shù)據(jù)是一個字符串,其中包含的字符為:A-Z秸妥、a-z滚停、0-9、+粥惧、/共64個字符:26 + 26 + 10 + 1 + 1 = 64键畴。【注:其實是65個字符,“=”是填充字符】起惕。64個字符需要6位來表示涡贱,表示成數(shù)值為0~63。
這樣惹想,長度為3個字節(jié)的數(shù)據(jù)經(jīng)過Base64編碼后就變?yōu)?個字節(jié)问词。
例:字符串“Xue”經(jīng)過Base64編碼后變?yōu)椤癢HVl”。
長度為3個字節(jié)的數(shù)據(jù)位數(shù)是8*3=24嘀粱,可以精確地分成6*4激挪。如果數(shù)據(jù)的字節(jié)數(shù)不是3的倍數(shù),則其位數(shù)就不是6的倍數(shù)锋叨,那么需要就不能精確地劃分成6位的塊垄分。,此時娃磺,需在原數(shù)據(jù)后面添加1個或2個零值字節(jié)薄湿,使其字節(jié)數(shù)是3的倍數(shù)。然后豌鸡,在編碼后的字符串后面添加1個或2個等號“=”嘿般,表示所添加的零值字節(jié)數(shù)。
例:字符串“Xu”經(jīng)過Base64編碼后變?yōu)椤癢HU=”涯冠。
字符串“X”經(jīng)過Base64編碼后變?yōu)椤癢A==”炉奴。
應用:
需要明文保存二進制數(shù)據(jù)時,可以將不可打印的二進制數(shù)據(jù)經(jīng)過Base64編碼轉成可打印的字符串蛇更。
Mozilla Thunderbird和Evolution用Base64來保密電子郵件密碼
Base64也會經(jīng)常用作一個簡單的“加密”來保護某些數(shù)據(jù)瞻赶,而真正的加密通常都比較繁瑣。
垃圾訊息傳播者用Base64來避過反垃圾郵件工具派任,因為那些工具通常都不會翻譯Base64的訊息砸逊。
在LDIF檔案,Base64用作編碼字串掌逛。
iOS中使用base64編碼的案例:
對文件進行加密
// 加密文件
-(void)base64FileEncryption
{
? ?// 加密文件
? ?// 1.得到需要加密文件的二進制數(shù)據(jù)
? ?NSString *path = @"/Users/apple/Desktop/xuexiwenjian.jpg";
? ?NSData *data = [NSData dataWithContentsOfFile:path];
? ?// base64加密并保存
? ?NSData *base64Data = [data base64EncodedDataWithOptions:0];
? ?[base64Data ?writeToFile:@"/Users/apple/Desktop/好好學習" atomically:YES];
}
對文件進行解密
- (void)base64FileDecryption
{
? ?// 解密 base64 加密之后的文件
? ?NSString *path = @"/Users/apple/Desktop/好好學習";
?? NSData *base64Data = [NSData dataWithContentsOfFile:path];
? ?// 解密
? ?NSData *data = [[NSData alloc] initWithBase64EncodedData:base64Data options:0];
? ?[data writeToFile:@"/Users/apple/Desktop/私密文件" atomically:YES];
}
對字符串進行加密
// 對字符串加密與解密 (base64)
-(void)base64StringEncryption
{
? ?// base64 加密! 將二進制數(shù)據(jù)進行加密!
? ?NSString *password = @"hello base64";
? ?NSLog(@"password: %@",password);
? ?// 1.將字符串轉換成二進制數(shù)據(jù)!
? ?NSData *data = [password dataUsingEncoding:NSUTF8StringEncoding];
? ?NSLog(@"data: %@",data);
? ?// 2.對二進制數(shù)據(jù)進行base64加密
? ?// 1> 可以直接加密出 base64的二進制數(shù)據(jù)
? ?// 2> 可以直接加密出 base64的字符串!
? ?NSData *base64Data = [data base64EncodedDataWithOptions:0];
? ?NSLog(@"base64Data: %@",base64Data);
? ?NSString *base64String = [data base64EncodedStringWithOptions:0];
? ?NSLog(@"base64String: %@",base64String);
}
對字符串進行解密
-(void)base64StringDecryption{
? ?// 1.將base64加密之后的數(shù)據(jù)轉換成普通的二進制數(shù)據(jù)!
? ?NSData *data1 = [[NSData alloc] initWithBase64EncodedData:base64Data options:0];
? ?NSLog(@"data1: %@",data1);
? ?NSString *password1 = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];
? ?NSLog(@"password1: %@",password1);
? ?NSData *data2 = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
? ?NSLog(@"data2: %@",data2);
? ?NSString *password2 = [[NSString alloc] initWithData:data2 encoding:NSUTF8StringEncoding];
? ?NSLog(@"password2: %@",password2);
}