软件开发中的密码学
简介
密码学, 最初来自于军事之中, 以前的密码都是使用密码本来加密解密的, 如果密码本被别人知道,, 密码基本上就是泄露了, 1977年RSA发明了一套算法叫做RSA加密算法
, 现在很多的加密算法诸如DES,AES都是在RSA算法的基础上衍生出来的, 安全性还是比较高的.
base64加密算法
维基百科 https://en.wikipedia.org/wiki/Base64
base64加密算法, 密文中共有64种字符, a-z, A-Z, 0-9,+,/, 还包括一个补充字符’=’, 如下图(图片来自wikipedia):
加密过程是这样的:
如下图所示, 如给Man三字字母加密, 三个字母转换成对应ASSIC码, M->77, a->97,n->110, 转换成二进制后如下图所示, 每个ASSIC码转换成了8位的二进制数, 然后再对二进制数,取每六位,再转换成ASSIC码, 这样形成的一个新的字符串就是加密后的密文, 如Man
加密后是 TWFu
, 如果最后剩余的数字不足六位则补=
, 一个=
代表两个零,
我对base64加密的理解, 由于base64加密算法是完全公开的,并且是可解密的, 所以如果网络传输使用base64还是不太安全的, 除非把base64加密的排序完全打乱, 自己约定一套加解密的顺序, 这样还是比较安全的, 不过这样还是可以破解的.
ios7,mac_10.9以后开始支持base64加密, 使用base64加解密的方法如下所示(iOS7以前需要自己写加密算法):
//base64机密过程
- (NSString *)base64Encode:(NSString *)str {
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
return [data base64EncodedStringWithOptions:0];
}
//base64解密过程
- (NSString *)base64Decode:(NSString *)str {
NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:0];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
使用base64的加密方式, 可以将图片,视频等二进制的数据转换成字符串来传输, 对于要求必须使用字符串传输数据的时候, 可以考虑讲数据使用base64加密之后传输, 在服务器端进行解密.
MD5
在国内, 加解密用的最多的还是md5, 加盐的方式, 这种方式安全性还是比较高的, 一般比较弱密码在http://www.cmd5.com都是可以被破解的, 使用的是暴利破解的方式, md5加密是不可逆的, 可以给一个文件, 一个字符串加密, 不会产生一样的密文.
程序开发中的加密方式
对于安全性要求比较高的时候, 可以使用下面的加密方式: