2018-2019-2 20165221课程设计学习-week2

2018-2019-2 20165221课程设计学习-week2

目录

  • 深入了解SM3算法
  • Python学习笔记-turtle库
  • 每种语言具体分析

  • 本周学习总结
  • 码云链接


一 . 深入了解SM3算法

算法概述:

  • 对长度为l(l < 2^64)比特的消息m, SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。

    算法过程:

  • 填充信息:假设消息m 的长度为l 比特.
    • 首先将比特“1”添加到消息的末尾,
    • 再添加k 个"0",k是满足l+1+k≡448mod512 的最小的非负整数。
    • 然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m的比特长度为512的倍数。
    2018-2019-2 20165221课程设计学习-week2_第1张图片
    • 先在原消息串后加1
    • 接着填充k个0,25+k≡448mod512,得K/min=423,
    • 将m字符串顺序重复排列64bit,添加在K个0比特后面
  • 迭代压缩
    • 迭代过程
      2018-2019-2 20165221课程设计学习-week2_第2张图片
      • 接上例,此时m'=24+1+423+64=512bit,即m'自成一组即可。
      • i值从0到n-1,即0到0,i值就取为0.
      • 即可进行迭代,运行压缩函数CF()
    • 消息扩展
      • 将消息分组进行扩展,得到132个字,方法如下:
        2018-2019-2 20165221课程设计学习-week2_第3张图片
      • 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'
    • 压缩函数
      2018-2019-2 20165221课程设计学习-week2_第4张图片

    • 杂凑值
      • 即可得到256比特的杂凑数值,即为y=ABCDEFGH

二 . 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

2018-2019-2 20165221课程设计学习-week2_第5张图片

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()
  • 两种书写方式的比较:
    2018-2019-2 20165221课程设计学习-week2_第6张图片

  • 其他书写方式:由importas保留字共同完成
    2018-2019-2 20165221课程设计学习-week2_第7张图片
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)
    2018-2019-2 20165221课程设计学习-week2_第8张图片
  • turtle的空间坐标体系,以窗口的正中心为原点和海龟运动的起始点
    2018-2019-2 20165221课程设计学习-week2_第9张图片
  • turtle.goto(x,y) 2018-2019-2 20165221课程设计学习-week2_第10张图片
  • turtle的相对坐标体系
    • turtle.bk(d):表示按海龟当前的反方向运动
    • turtle.fd(d):表示按海龟当前的正方向运动
    • turtle.circle(r,angle):表示按照海龟当前方向的左侧以曲线运动
      2018-2019-2 20165221课程设计学习-week2_第11张图片
  • turtle的角度坐标体系
    • turtle.seth(angle)
      2018-2019-2 20165221课程设计学习-week2_第12张图片

    • turtle.left(angle)/turtle.right(angle)
      2018-2019-2 20165221课程设计学习-week2_第13张图片

  • RGB色彩模式
    2018-2019-2 20165221课程设计学习-week2_第14张图片
    • 通常默认采用小数值,也可切换成整数值模式使用
    • 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),默认圆心在海龟的左侧,为负值时则在海龟的右侧
      2018-2019-2 20165221课程设计学习-week2_第15张图片
      2018-2019-2 20165221课程设计学习-week2_第16张图片
  • 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()
  • 运行效果如图:
    2018-2019-2 20165221课程设计学习-week2_第17张图片

  • 完美!!!

三 . 每种编程语言的具体分析

  • C语言
    • 学习内容:指针,内存,数据类型
    • 语言本质:理解计算机的系统结构
    • 解决的问题:性能问题
  • Java语言
    • 学习内容:对象,跨平台,运行时
    • 语言本质:理解主客体之间的关系
    • 适用对象:软件类专业
  • C++语言

    • 学习内容:对象,继承,多态
    • 语言本质:理解主客体之间的关系
    • 解决问题:大规模的程序问题
  • Python语言
    • 学习内容:编程逻辑,第三方阵
    • 语言本质:理解问题的求解
    • 适用对象:所有的专业
  • 编程语言的种类发展
    • 机器语言:代码直接执行,与CPU的型号有关
    • 汇编语言:有助记符,汇编器,与CPU的型号有关
    • 高级语言:接近自然语言,编译器,与CPU的型号无关
    • 超级语言:粘性整合已有的程序,具备庞大的计算生态

四 . 本周学习总结

  • 初步了解了SM3算法的算法流程和算法元素

  • 学习了Python中的turtle库绘图工具的使用
  • 了解了几种流行的编程语言的区别与联系
  • 了解了编程语言的种类发展
  • 个人进度与小组进度是一致的,有序进行


五 . 代码链接

  • 代码链接
    2018-2019-2 20165221课程设计学习-week2_第18张图片

参考资料

  • 通过git上传本地代码到码云仓库

  • git命令行的使用
  • 国密算法概述
  • python开发环境的搭建
  • SM3国密算法详解

你可能感兴趣的:(2018-2019-2 20165221课程设计学习-week2)