2018-2019-2 20165221课程设计学习-week2
2018-2019-2 20165221课程设计学习-week2
目录
一 . 深入了解SM3算法
#### 算法概述: - 对长度为l(l < 2^64)比特的消息m, SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。 #### 算法过程: - **填充信息**:假设消息m 的长度为l 比特. - 首先将比特“1”添加到消息的末尾, - 再添加k 个"0",k是满足```l+1+k≡448mod512``` 的最小的非负整数。 - 然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m的比特长度为512的倍数。-
先在原消息串后加
1
-
接着填充k个
0
,25+k≡448mod512
,得K/min=423, -
将m字符串顺序重复排列64bit,添加在K个
0
比特后面 -
迭代压缩
-
迭代过程:
- 接上例,此时
m'=24+1+423+64=512bit
,即m'自成一组即可。 - i值从0到
n-1
,即0到0,i值就取为0. - 即可进行迭代,运行压缩函数
CF()
- 接上例,此时
-
消息扩展
- 将消息分组进行扩展,得到132个字,方法如下:
- j的数值从16取到67,当j=16时,可得到Wj=((W0)
32比特异或
(W7)32比特异或
(W13左移15位))32比特异或
(W3左移7位)32比特异或
(W10) - 再让j从0取到63,让Wj与Wj+4进行32比特异或运算得到
Wj'
- 将消息分组进行扩展,得到132个字,方法如下:
-
压缩函数
-
杂凑值
- 即可得到256比特的杂凑数值,即为
y=ABCDEFGH
- 即可得到256比特的杂凑数值,即为
-
二 . Python学习笔记-turtle库
#### Python蟒蛇的绘制 - 代码如下: ``` import turtle turtle.setup(300,300,0,100) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pencolor(25) turtle.prncolor("black") turtle.seth(-40) for i in range(4): turtle.circle(40,80) turtle.circle(40, 80) turtle.circle(40,80/2) turtle.fd(40) turtle.circle(16,180) turtle.fd(40 * 2/3) turtle.done ``` ![](https://img2018.cnblogs.com/blog/1322987/201905/1322987-20190514220052802-371559462.png)Python蟒蛇代码实例分析
- 库引用
- 调用库:
import <库名>
import turtle
- 调用库中的函数:
<库名称>.<库中函数名>(<函数具体参数>)
turtle.setup(300,300,0,100)
- 调用库:
- 保留字的书写方式:
from turtle import*
- 后面的书写时都可省略
turtle.
from turtle import*
setup(300,300,0,100)
penup()
fd(-250)
pendown()
pensize(25)
pencolor("black")
seth(-40)
for i in range(4):
circle(40,80)
circle(40, 80)
circle(40,80/2)
fd(40)
circle(16,180)
fd(40 * 2/3)
done()
-
两种书写方式的比较:
-
其他书写方式:由
import
与as
保留字共同完成
import turtle as t
t.setup(300,300,0,100)
t.fd(-250)
t.pendown()
t.pensize(25)
t.pencolor("black")
t.seth(-40)
for i in range(4):
t.circle(40,80)
t.circle(40, 80)
t.circle(40,80/2)
t.fd(40)
t.circle(16,180)
t.fd(40 * 2/3)
t.done
turtle绘图工具的使用
-
turtle.setup(width,hight,startx,starty)
-
turtle的空间坐标体系,以窗口的正中心为原点和海龟运动的起始点
-
turtle.goto(x,y)
-
turtle的相对坐标体系
turtle.bk(d)
:表示按海龟当前的反方向运动turtle.fd(d)
:表示按海龟当前的正方向运动turtle.circle(r,angle)
:表示按照海龟当前方向的左侧以曲线运动
-
turtle的角度坐标体系
-
turtle.seth(angle)
-
turtle.left(angle)/turtle.right(angle)
-
-
RGB色彩模式
- 通常默认采用小数值,也可切换成整数值模式使用
turtle.colormode(mode)
- 1.0: RGB小数值模式
- 255:RGB整数值模式
-
画笔控制函数:
turtle.pu()
-->画笔抬起,海龟在飞行,不在画板上形成图案turtle.pd()
-->画笔落下,海龟在爬行,在画板上形成图案turtle.pensize()
-->画笔的宽度turtle.pencolor()
-->画笔颜色,为海龟涂装。- 颜色字符串-->
turtle.pencolor("purple")
- RGB的小数值形式-->
turtle.pencolor(0.63,0.13,0.94)
- RGB的元组值-->
turtle.pencolor((0.63,0.13,0.94)
- 颜色字符串-->
-
turtle运动控制函数
turtle.circle(r,extent)
,默认圆心在海龟的左侧,为负值时则在海龟的右侧
-
range()函数
- 作用是:产生计数循环
- 用法:
- range(N),产生0到N-1的整数序列,共N个
- range(5)---> 0,1,2,3,4
- range(M,N),产生M到N-1的整数序列,共N-M个
- range(2,5)---> 2,3,4
-
自己动手尝试
- 利用前面学到的函数,编写一个可以写出自己名字大写首字母的简单Python程序
import turtle as t
t.setup(300,300,300,300)
t.pensize(15)
t.pencolor("red")
t.seth(0)
t.fd(40)
t.pu()
t.fd(-20)
t.pd()
t.seth(-90)
t.fd(60)
t.pu()
t.fd(-60)
t.seth(0)
t.fd(50)
t.seth(-60)
t.pd()
t.fd(69.28)
t.pu()
t.seth(90)
t.fd(60)
t.seth(-120)
t.pd()
t.fd(69.28)
t.done()
-
运行效果如图:
-
完美!!!
三 . 每种编程语言的具体分析
- **C语言** - 学习内容:指针,内存,数据类型 - 语言本质:理解计算机的系统结构 - 解决的问题:性能问题-
Java语言
- 学习内容:对象,跨平台,运行时
- 语言本质:理解主客体之间的关系
- 适用对象:软件类专业
-
C++语言
- 学习内容:对象,继承,多态
- 语言本质:理解主客体之间的关系
- 解决问题:大规模的程序问题
-
Python语言
- 学习内容:编程逻辑,第三方阵
- 语言本质:理解问题的求解
- 适用对象:所有的专业
-
编程语言的种类发展
- 机器语言:代码直接执行,与CPU的型号有关
- 汇编语言:有助记符,汇编器,与CPU的型号有关
- 高级语言:接近自然语言,编译器,与CPU的型号无关
- 超级语言:粘性整合已有的程序,具备庞大的计算生态
四 . 本周学习总结
- 初步了解了SM3算法的算法流程和算法元素- 学习了Python中的turtle库绘图工具的使用
- 了解了几种流行的编程语言的区别与联系
- 了解了编程语言的种类发展
- 个人进度与小组进度是一致的,有序进行