今天突然想起了base64编码加密,然后就整理了一下,虽然用的不多,但了解多一点并无坏处~
一、简介
是网络上使用最广泛的编码系统,能够将任何二进制数据,转换成只有65个字符组成的文本文件。
由 az,AZ,0~9,+,/,=等65个字符组成。
Base64编码后的结果能够反算,不够安全。
Base64是所有现代加密算法的基础算法。
二、原理
参考文章:
http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html
Ø base64的编码都是按字符串长度,以每3个8bit的字符为一组,
Ø 然后针对每组,首先获取每个字符的ASCII编码,
Ø 然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节
Ø 然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节
Ø 然后将这4个8bit的字节转换成10进制,对照Base64编码表,得到对应编码后的字符。
注:如果被编码字符长度不是3的倍数的时候,则都用0代替,对应的输出字符为=
Base64对照表
三、终端命令
3、终端命令
将 abc.png 进行 base64编码,生成 xxx.txt 文件
$ base64 abc.png -o xxx.txt // -o 表示输出
将 xxx.txt 解码生成1.png
$ base64 -D xxx.txt -o 1.png // -D 表示 decoder 解码
将字符串 ABC 进行 base64 编码
$ echo -n ABC | base64
将字符串 QUJD 解码
$ echo -n QUJD | base64 -D
四、Base64代码实现
1、修改代码
保存密码不能使用明文,使用base64进行加密。
提交数据到服务器不能使用明文,使用base64进行加密。
#pragma mark - Base64
// 编码:A => QQ==
-(NSString*)base64Encode:(NSString *)string{
//1.将字符串转换成二进制数据
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
//2.利用ios7.0的方法,直接 base64 编码
return [data base64EncodedStringWithOptions:0];
}
// 解码:QQ== => A
- (NSString*)base64Decode:(NSString *)string {
//1.将base64编码后的字符串,解码成二进制数据
//这里不能使用注释掉的方法转换成二进制,因为 string 就是已经编码过的字符串
//NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];
//2.返回解码的字符串
return [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
}