加密算法
关于多表单在项目中的应用主要是上传文件,因为所有上传lms的操作,必须校验username&password两个关键参数。由在解决这个问题的过程中,无论是使用自己写的拼接method又或者调用AFNetWorking的上传函数(里面已经实现了多表单的拼接),在WireShark中检查的格式也是正确的,后台也无法解析获得正确参数,因此采取了把参数放置http header的方式来传递参数。
但因为http header的内容是通过抓包工具便可轻易获取的,而且内容又是明文,因此用于传输密码参数是极其不安全的,因此需要用到加密算法。
而加密技术分别有两大类,分别是对称式加密技术与非对称式加密技术。
对称式加密技术
对称式加密就是加密和解密使用同一个
密钥,通常称之为“Session Key ”这种
加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”
加密法,它的Session Key长度为56bits。
密钥是用于加密解密的一个特殊字段,需要加密的数据与密钥经过相对应的算法运算后会获得相应的密文。
但由于密钥是公开的,因此若加密了的消息被第三方截获后,第三方还有可能解码,获得传输的明文。
对称式加密算法的优点是速度快,但安全性较非对称式加密技术低。
非对称式加密技术
非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难不把密钥告诉对方,不管用什么方法都有可能被别窃听到。而非对称式的加密方法有两个密钥,且其中的“公钥”是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。
非对称加密技术的安全性更高,但加密解密速度较慢。
若想更好地理解公钥、私钥、数字证书的概念可以参考《图说公钥、私钥与数字证书》
base64加密解密应用
base64在本项目中用于解决文件上传时,传递username、password关键参数的功能。因为多表单于后台无法获取关键参数,因此只好把username、password放置到http header中。
因此需要base64 这种八位可逆的加密解密算法,将明文转成密文。
具体实现如下。
关于加密算法,针对项目需要,采用base64可逆加密算法实现关键信息的保护。具体实现如下:
//string to base64 string
+ (
NSString
*) DataConvertBase64ByString:(
NSString
*) originStr{
NSData
* originData = [originStr
dataUsingEncoding
:
NSUTF8StringEncoding
];
NSString
* encodeResult = [originData
base64EncodedStringWithOptions
:
NSDataBase64EncodingEndLineWithLineFeed
];
return
encodeResult;
}
关于
DataConvertBase64ByString method是通过调用原生的
base64EncodedStringWithOptions method实现base加密,其中二进制数据的格式必须与服务器统一,项目中采用的是UTF-8.
//name omit for security
+ (
NSString
*) keyOmit:(
NSString
*) key{
if
([key
isEqualToString
:
@"username"
]) {
return
@"u"
;
}
else
if
([key
isEqualToString
:
@"password"
])
return
@"p"
;
return
nil
;
}
关于
keyOmit method的作用是为了隐藏参数意义的作用。
参考文章:《base64编码解码原理》