在介绍之前现在说明一下,编码与加密呢其实不是同一概念,编码是编码,加密是加密。
编码:把我们的一些数据比如图片,明文等等,以另一种表现形式出来,发送出去,然后接收的一端呢在解析出来。
被编码的数据是可以被解析的(解码)
加密:加密后的数据是不可以被解析,它安全性更高。
举个例子:我们注册账号的密码,肯定是加密而不是编码。如果是编码,一旦被人截取到在解析,你的账号就会被盗。
iOS 中base64编码
1.通过代码实现
//解码的内容是字符串 “Hello, World!”
NSString *str = @"Hello, World!";
//base64编码
NSData *data1 = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString *dataStr1 = [data1 base64EncodedStringWithOptions:0];
NSLog(@"编码:%@",dataStr1);
打印结果:SGVsbG8sIFdvcmxkIQ==
Hello, World! 的base64编码就是 “SGVsbG8sIFdvcmxkIQ==”
然后在用“SGVsbG8sIFdvcmxkIQ==” 解码
//base64解码
NSData *data2 = [[NSData alloc]initWithBase64EncodedString:@"SGVsbG8sIFdvcmxkIQ==" options:0];
NSString *dataStr2 = [[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding];
NSLog(@"解码:%@",dataStr2);
打印结果:Hello, World!

2.通过终端实现(mac 上自带base64编码)
字符串编码
//编码
$ echo -n 这里是字符串 | base64
//解码
$ echo -n 这里是base64编码 | base64 -D
--------------------------------------------------------
--------------------------------------------------------
文件编码:(文件编码一般都用.txt)
假设编码 img.png 这张图片
cd到文件目录下
//编码
$ base64 img.png -o img.txt
//解码
$ base64 -D img.txt -o img.png
加密:
加密从以前到现在出现了很多加密的形式,不同的加密方法应用也不同,各有各的优点。
在 iOS中,不管是HASH 还是对称 非对称苹果都已经有了,在<CommonCrypto/CommonCrypto .h>这个库里面
1.HASH 也叫(散列函数)
1.MD5:(32个字符)
2.HMAC
3.SHA1/512
特点:
1.算法公开
2.对相同的数据加密,得到的结果一样
3.对不同的数据加密,得到的结果是定长的
4.不能反算
5.用来做数据的识别
在终端中使用 $ MD5 -s "这里是加密的内容"
对于MD5来说,虽然加密后不可以解密,但是有些网站也能查询出来,因为那些网站存有大量MD5数据,所以在使用MD5这种方式时要使用一种方式叫 “ 加盐 ”,就是在用户的密码后面加一段特殊的符号。这种方式可以杜绝别人通过一些网站查询出用户密码,但是注意这窜特殊的符号别泄露出去。
2.对称加密 (传统加密算法)
DES :(早期的加密算法,加密强度不够高,被淘汰)
3DES:(需要3个密钥加密,然后同过3个密钥进行解码,过程太复杂,没人用)
AES(高级密码标准) 美国的安全局 苹果的钥匙串就是用的这种方式
特点:
1.加密之后可以反算回来
2.明文通过密钥加密
3.加密后的数据通过密钥解密
3.注意要保护密钥
加密方式:
ECB:电子代码本,每一块数据独立进行加密
CBC:密码块链,使用一个密钥和一个初始化向量对数据进行加密,每一块的加密都需要前面的数据做依赖,每一块数据解密都依赖前一块数据可以保证数据的完整性,一般用于防范切听
$ openssl enc -des-ecb -K 616263 -nosalt -in messge.txt -out msg1.bin
这里的616263是ASCLL码 对应的就是小写abc
注:用des这个算法 ecb 这个方式 key是 616263 加密messge.txt 输出 msg1.bin
3.非对称加密(RSA)--现代加密算法
genres 生成一个RSA私钥
rsautl 使用RS密钥进行加密,解密,签名和验证等运算
rsa 处理RSA密钥的格式转换等问题
$ openssl genrsa -out private.pem 1024
注:1024 是 这个私钥的长度是1024个比特位(bi t)
$ openssl rsa -in private.pem -pubout -out public.pem
注:从私钥中提取公钥
#利用公钥加密
$ openssl rsautl -encrypt -in messge.txt -inkey public.pem -pubin -out enc.txt
注:通过公钥public.pem 把 messge.txt 加密为enc.txt 输出
#私钥解密
$ openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dnc.txt
注:使用私钥解密
#利用私钥加密(签名)
$ openssl rsautl -sign -in dnc.txt -inkey private.pem -out enc2.txt
#公钥解密
$ openssl rsautl -verify -in enc2.txt -inkey public.pem -pubin -out messge.txt
注:使用私钥解密
对称加密适合加密大的数据非对称适合加密小的数据,由于对称加密都是用密钥加密解密的,所以在传递的过程中,对称加密的密钥可以用非对称来加密,这就是对称和非对称的混合使用
网友评论