信息安全的相关内容属于高级程序员范畴,学习上可能有些吃力,大概明白原理,会用即可
网络&用户&安全
应用离不开网络,而网络就离不开用户
能够保护用户隐私的应用,才能得到用户的信任和持续性发展
学习信息安全能做什么?
利用对称&非对称加密能够保护用户的隐私、交易信息的机密性&完整性
利用散列函数能够保护用户密码,并且能够防止文件被篡改
利用HTTPS能够在用户和服务器之间建立一条安全的数据通道
信息安全,意为保护信息及信息系统免收未经授权的进入、使用、披露、破坏、修改、检视、记录及销毁
对个人而言,信息安全对于个人隐私具有重大的影响
有关信息安全的内容可以简化为下列三个基本点
机密性
完整性
可用性
安全技术仅包含以下三种类型
密码学,例如数字签名
访问控制,例如网络防火墙
隐藏,例如数字水印
密码学是研究如何隐秘的传递信息的学科,密码学的目的是隐藏信息的涵义
现代密码学应用领域
网络安全、数字签名、电子商务、.....
经典密码学
在近代以前,密码学只考虑信息的机密性,即:将可理解的信息转换成难以理解的信息[加密].并且使用有特殊信息的人能够逆向恢复[解密].但缺乏特殊信息的拦截者或窃听者则无法解读
经典密码学是基于字符级的加密
70年代,RSA算法问世(RSA是根据美国三位科学家的名字首字母命名的),算法是公开的
公钥(数字) - 负责加密,不能解密
私钥(数字) - 负责解密
经典密码学: 字符—>字符,密码本
现代密码学:计算机介入了,二进制介入
BASE64 是一种非常重要的一个编码方式
—加密
—网络数据传递!
现代的密码学对数据进行加密之后,产生的结构是一堆二进制,不容易保存,所以经常会把加密后的结果,通过base64编码,然后在网络山进行传递
Base64 是一种基于64个可打印字符来表示二级制数据的表示方法
可打印字符包括字母A-Z、a-z、0-9,共62个字符,另外两个符号在不同的系统不同(+和/,现在一般用的是/)
由于现代密码学是基于二级制数据进行加密的,因此经常会使用Base64对加密结果进行编码,以便于在网络上传输
base64 对照表

base64编码过程
1.将要编码的数据转换成二进制
2.每6个bit一组并计算对应的索引数值
3.查表找到对应的字符
4.如果编码字节数不能被3整除,则
4.1使用0在末尾补足
4.2编码结果末尾添加1~2个=,表示补足字节数
echo “ABC” | base64 //将ABC用base64进行编码输出编码结果, |的意思是将|前面指令的输出结果当做后面指令的输入参数
echo -n“ABC” | base64 //使用-n的区别是默认在字符串ABC后面是有一个回车的, 加上-n就是将字符串不加回车的完整信息显示出来
如下讲解将ABC经base64编码解码的过程
ABC
1.将ABC完整的写入到文本文件中
xxd a.txt // xxd 指令表示将内容用十六进制输出
得到结果 414243
3.将得到的十六机制数据转换车二级制数据
得到结果 0100 0001 0100 0010 0100 0011
4.将二级制数据按base64的每6个bit一组
得到结果 010000 010100 001001 000011
5.转换成10进制
16 20 9 3
6.对照表格得到结果QUJD
用指令将ABC经base64进行编码
echo -n QUJD | base64 -D //-D表示解码
将文件经base64编码
base64 -in 要处理的文件的文件名 -o 处理后输出的文件名
base64 -in iTerm.app.zip -o iTerm.app
将经过base64处理的文件还原
base64 -D -i 要解码的文件名 -o 解码后输出的文件名
base64 -D -i iTerm.txt -o iTerm.app.zip
特点
1.能够逆运算
2.比原始数据略大(4/3倍)
3.不够安全,但却被很多加密算法作为编码方式
号外:经过base64处理后的数据会变大,是之前的4/3倍(因为将8位的数据转换成了6位)
号外:常用终端命令
echo 输出文本
-n 不输出回车
-e 支持转移字符,例如\n、\t
xxd 以十六进制进制方式查看文件
-b 以二进制方式查看
bc 终端下使用的计算器
ibase 输入数据进制
obase 输出数据进制
quit 退出
base64 对指定内容进行Base64编码
-D 解码
|(竖线) 将前一命令的输出结果作为后一命令的输入内容
用法示例:
echo -e a.txt
xxd -b a.txt
bc 下指令的使用要先输入bc回车然后再输入指令
obase=2 //指定输出数据为2进制
openssl 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用
加密算法
HASH最主要的算法有两种:
1.MD5(国内使用多)
www.cmd5.com 可以查询加密后的密文解密出来
2.SHA1(美国国家安全局使用较多)
主要作用是:把一组数据打乱,提取出特征码,”指纹”识别,不能被反算
$ echo -n abc | openssl md5 //将abc用MD5 处理
*MD5任何数据打乱,都会生成32为固定长度的字符串
*MD5不仅可以对密码进行加密,而且可以制作文件的指纹,可以防止文件被篡改
$echo -n abc | openssl SHA1 //将abc用SHA1处理
*sha1 处理数据后都会生成40位的固定长度的字符串
在网络上,传输数据时,同样的密码,同样的算法,每次加密的结果应该不同
散列算法
又称散列函数,哈希(HASH)函数
该函数将数据打乱混合,重新创建一个叫做散列值的指纹
对称加密算法(传统加密算法)
加密和解密使用相同密钥的算法,又称私钥加密、或者共享密钥
秘钥(数字):加密解密都使用这个数字
对称加密算法中,最终要的就是秘钥的保管!
DES是一种分组数据加密技术(原来的标准)
先将数据分成固定长度的小数据块,之后进行加密
速度较快,适用于大量数据加密
3DES是一种基于DES的加密算法(改进的标准,现在仍然广泛使用)
使用3个不同密匙对同一个分组数据块进行3次加密
如此以使得密文强度更高
AES,高级加密标准(最新的标准),是美国联邦政府采用的一种区块加密标准
相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准
对称加密算法的思路是完全一样的.
优点:计算快,现在仍然被广泛使用!
对称加密中的ECB & CBC
ECB :电子代码本,就是说每个块都是独立加密的
CBC :密码块链,使用一个密钥和一个初始化向量 (IV)对数据执行加密转换
CBC加密可以有效地保证密文的完整性,也就是说如果有一个块在传送时丢失了(或被敌人改变了),就会导致后面所有的块无法正常解密这个特性可以用来防范一些窃听技巧

iOS程序员面临最多的问题,iOS加密完的内容,java没法解密名,或者两者加密结果不一致。
要想一致,需要一个中间工具 -> "OpenSSL"
cipher 密码
非对称加密算法(在iOS开发中用的很少)
加密和解密使用不同密钥的算法,又称公钥加密
公钥: 用公钥加密的数据,使用私钥解密
私钥: 用私钥加密的数据,使用公钥解密
在网络传输上,只要双方,一方有公钥,一方有私钥.
优点:
安全
缺点:
速度非常非常非常慢!
- 通常用来加密非常重要的数据,譬如,对称算法中使用的密钥!实际的加密解密都是用对称算法!
- 非对称,在iOS开发中,极少用!
数字证书,签名,HTTPS 中的证书会使用到.
网友评论