学号20145220《信息安全系统设计基础》第8周学习总结
教材学习内容总结
三种数字表示:
无符号数(unsigned)编码基于传统的二进制表示法,表示大于或者等于0的数字;
有符号数(signed)/二进制补码(two's compliment):编码是表示有符号整数的最常见的方式;
浮点数(floating-point)编码是表示实数的科学计数法的以2为基数的版本。
逆向思维考虑为什么会产生漏洞?
我没有理解“逆向思维”的意思,就现在学过的知识而言,漏洞的产生主要来自溢出。就是程序员的大意疏忽——计算机计算的微妙细节没有注意到也没有测试到,这些微妙的细节包括有符号数被隐式转换为无符号数,乘法溢出等,最终由黑客或者用户发现漏洞。从非技术的角度分析,现在也有一些开发公司出于商业利益,明知道自己的软件安全性不明,却未接受足够的测试和分析就走向市场,将漏洞的防护寄托给“补丁”,这也使得用户的软件可能在补丁补上之前就已经被恶意入侵,甚至很多补丁本身也带有漏洞。
另外,今天web编程课的刘念老师讲到一种理解相对容易的黑客入侵方式,感觉非常有趣:
简单说来就是利用了SQL注入上的漏洞,也叫做“SQL注入攻击”,举个例子,
首先黑客通过代码来查询某个网站的登陆验证入口,代码为
SELECT * FROM student
WHERE sNo=20145316
p22
进制转换:
早在大一的计算机导论课就学到过,在此不做赘述
核心思想就是:非二进制转非二进制都用二进制做一步中转
(十进制符合人类日常表达规律所以如果要求16转10直接转就可以)
例
十六进制转八进制
16进制:0x3A4C
2进制:0011 1010 0100 1100
等价表示 0 011 101 001 001 100
8进制:3514
p26: 字节顺序是网络编程的基础,记住小端是“高对高、低对低”,大端与之相反就可以了。
先明白地址:跨越多字节的程序对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。书中举例——一个int类型的变量x的地址为0X100,也就是说地址表达式&x的值为0x100,那么x的四个字节(上一节已经讲过int类型的存储大小为4字节)将被存储在存储器的0x100、0x101、0x102、0x103位置。
接下来我们就来探讨这若干个字节的排列顺序,一个w位整数,位表示为[Xw-1,Xw-2,……,X0]那么Xw-1就是最高有效位,X0是最低有效位,因为八位是一个字节,所以按位排列头八个最高有效位构成的字节就是最高有效字节。某些机器选择在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,有的机器反之,我们称最高有效字节在前面的方式为大端法(常用,大多数Intel的选择),而最低有效字节在前的方式为小端法(IBM和Sun,Intel兼容除外),另外还有一些比较新的微处理器用的是双端法。
针对大小端法的辨别娄老师给了我们一个简单的口令:小端法是“高对高,低对低”,大端法相反。即小端法的低位地址对应低有效字节(位表示书写靠后的位),大端法低位地址对应高有效字节。感觉大端法和人类的阅读习惯更接近,这可能也是它被更多采用的一个原因吧。
强制类型转换:可以让字节顺序变得可见的一种方式,不推荐这种编程技巧,但确实很好用,有的时候甚至是必须的,尤其是系统级编程。
p32: 能区分逻辑运算(结果是1或0)和位运算(结果是位向量),所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。
什么是布尔代数:一个数学概念,又称逻辑代数,多用于计算机技术上。它是将逻辑值TRUE和FALSE编码为二进制1和0,以研究逻辑推理基本原则的代数。下面是布尔代数的几种运算
~:否 &:与 |:或 ^:非
一个布尔函数可以有很多种表达形式(离散数学和数字电路知识),而我们主要研究最大项(变量之和)表达和最小项(变量的乘积项)表达。布尔运算可以扩展到位向量的运算上,在二进制上非常容易。
但对于“只要一个与非门,就可以完成所有的逻辑运算”,这句话没有看懂,虽然知道不同逻辑门可以进行代替,但百度了一些资料也都并没有提到与非门可以完成所有逻辑运算啊……
扩展:从一个较小的数据类型转换到一个较大的类型。无符号数的转换是简单的在表示的开头添0,这种运算称为零扩展,补码数字的转换则是在表示中添加最高有效位值的副本,称为符号扩展。扩展前要先将要扩展的数值进行二进制表示才能找到最高有效位Xw-1。虽进行扩展,但位向量不变。
截断数字:与扩展相反,位向量可能会改变——溢出。溢出也是模运算。
其他(感悟、思考等,可选)
通过这周的学习,我学习到了很多知识都要从敲代码之中才能了解,只有真正自己去敲代码,才能学到其中的只是,发现自己的问题。我一定会继续努力敲代码的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |