IOS密碼學分論-base64

什么是base64?

base64是一種用64個字符串來表示任意二進制數(shù)據(jù)的方法。這是一種可逆的編碼方式

base64的原理:

編碼后的數(shù)據(jù)是一個字符串,其中包含的字符為:A-Z、a-z、0-9、+、/共64個字符:26 + 26 + 10 + 1 + 1 = 64?!咀ⅲ浩鋵嵤?5個字符,“=”是填充字符】。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編碼轉(zhuǎn)成可打印的字符串。

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.將字符串轉(zhuǎn)換成二進制數(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ù)轉(zhuǎn)換成普通的二進制數(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);

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 最先接觸編程的知識是在大學里面,大學里面學了一些基礎的知識,c語言,java語言,單片機的匯編語言等;大學畢...
    oceanfive閱讀 3,367評論 0 7
  • 嘟噥嘟噥:最近接到一個任務:在客戶端動態(tài)生成RSA密鑰對,然后向服務器發(fā)送這個密鑰對中的公鑰字符串,由服務器進行公...
    TimmyR閱讀 8,352評論 19 21
  • NSData全部API學習。 大家好,我是大鵬,在socket網(wǎng)絡編程傳輸?shù)倪^程中NSData用的地方很多,也總結(jié)...
    li大鵬閱讀 8,061評論 1 2
  • 大疆在紐約發(fā)布了第一款掌上無人機: 非??幔瑧撜f是重新定義了無人機! 非常小 一個巴掌那么大,是大疆最小的無人機...
    8d3638322ea0閱讀 389評論 0 0
  • 好久沒有碼字,開頭都忘記了怎么去寫,這大概就是經(jīng)常不動腦,腦袋也會生銹的效果吧。 夜深,躺床,思緒緊繃不得入睡,覺...
    夏天和1225閱讀 243評論 0 0

友情鏈接更多精彩內(nèi)容