[MITOPENCOURSEWARE] 6.094 Introduction to Programming in MATLAB

这篇博客介绍了MATLAB的基础知识,包括变量、脚本、运算及数组操作。MATLAB被视作强大的图形计算器,同时具备编程语言功能。讲解了如何创建和修改变量、保存和加载变量到文件、注释脚本、使用内置命令如`help`和`doc`,以及数组的创建,如行向量、列向量和矩阵,还涉及到数组索引、指数和对数运算以及随机数生成。此外,提到了MATLAB的索引从0开始,并给出了 Homework 1 的相关提示,涉及科学技术法、虚数和统计计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Introduction to MATLAB

Lecture 1 Variables, Scripts, and Operations

  • Matlab Basic

    • MATLAB can be thought of as a super-powerful graphing calculator
    • In addition it is a programming language
  • 一些命令

    • 帮助命令
      • help [ ]
      • doc [ ] 更详细的帮助
    • 注释 %

      第一行注释为脚本的帮助文档

    • 新建脚本 edit

      edit [ ].m

    • 输出字符串disp

      注意字符串使用单引号

    • 保存变量到文件中save

      save myFile a b

      • saves variables a and b to the file myfile.mat
      • myfile.mat file is saved in the current directory
    • 移除当前环境中变量 clear
    • 加载文件中变量load
    • 清理命令窗口clc
  • 变量

    • 创建和修改的变量会一直保存在工作区
    • Matlab is a weekly typed language. 不需要初始化变量
    • 变量命名:首位必须是字母;以字母、数字、下划线_ 组成
    • 大小写敏感
    • Built-in variables. Don’t use these names!
      • i and j can be used to indicate complex numbers
      • pi has the value 3.1415926…
      • ans stores the last unassigned value (like on a calculator)
      • Inf and -Inf are positive and negative infinity
      • NaN represents ‘Not a Number’
  • 若不想显示输出,则在句末加上;

  • 数组[ ]

    Two types of arrays

    1. matrix of numbers (either double or complex)
    2. cell array of objects (more advanced data structure)
    • 行向量:在[ ] 中使用逗号或空格分隔值
    • 列向量:在[ ]中使用;分隔
    • size( )显示矩阵大小
    • length( )得到矩阵长度
    • Initialize a vector of oneszeros, or random numbers
      » o=ones(1,10)
      row vector with 10 elements, all 1
      » z=zeros(23,1)
      column vector with 23 elements, all 0
      » r=rand(1,45)
      row vector with 45 elements (uniform [0,1])
      » n=nan(1,69)
      row vector of NaNs (useful for representing uninitialized variables)
    • To initialize a linear vector of values use linspace
      » a=linspace(0,10,5)
      starts at 0, ends at 10 (inclusive), 5 values
      Can also use colon operator (:)
      » b=0:2:10
      starts at 0, increments by 2, and ends at or before 10
      increment can be decimal or negative
      » c=1:5
      if increment isn’t specified, default is 1
    • To initialize logarithmically spaced values use logspace
      similar to linspace, but generate logarithmically spaced vectors
    • Vector Indexing
      • Matlab 索引从0开始
      • The index argument can be a vector
      • 使用max
Simplified AES加密算法实训报告 1. 工程概况 本实训项目基于C++语言,旨在实现一个简化版的高级加密标准(AES)算法,作为密码学原理学习与编程实践的教学平台。项目将传统AES算法进行精简优化,设定数据块大小为16比特(N_b = 2,每个半字节4比特),加密轮数为2轮(N_r = 2),密钥长度同样为16比特(N_k = 2),完整复现AES加密核心流程。 项目采用模块化设计思路,将加密过程拆解为字节替换、行移位、列混淆、轮密钥加及密钥扩展等独立功能模块,每个模块对应AES算法的关键操作。通过这种设计,不仅降低了算法实现的复杂度,也为学习者提供了清晰的密码学实践路径,有助于深入理解对称加密算法的工作原理与编程实现细节。 2. 目标与总体方案 2.1 设计目标 1. 实现符合AES加密原理的简化版加密算法,完整复现其核心操作流程。 2. 验证16位数据在简化AES算法下的加密流程正确性与可行性。 3. 构建模块化、可扩展的加密框架,便于后续功能升级与算法优化。 4. 输出符合加密标准的二进制密文结果,确保加密逻辑的准确性。 2.2 总体方案 mermaid graph TD A[主程序] --> B[密钥扩展模块] A --> C[加密流程模块] B --> D[轮密钥生成] C --> E[轮密钥加] C --> F[字节替换] C --> G[行移位] C --> H[列混淆] 主程序作为入口,分别调用密钥扩展模块和加密流程模块。密钥扩展模块根据主密钥生成各轮加密所需的轮密钥;加密流程模块按顺序执行轮密钥加、字节替换、行移位和列混淆操作,完成明文到密文的转换。 3. 设计方法和内容 3.1 核心算法流程 加密过程严格遵循AES算法数学模型,具体步骤如下: 首先,将明文与初始轮密钥(K_0)进行异或运算;随后进入加密轮次循环,每轮依次执行字节替换、行移位操作,并在非最后一轮执行列混淆;最后,将中间状态与当前轮密钥(K_r)进行异或,得到最终密文。 3.2 关键模块实现 ① 字节替换(S-Box) 该函数将16位数据拆分为两个半字节,分别根据预定义的4x4 S-Box表进行非线性替换,实现数据混淆,增强加密安全性。 ② 行移位操作 函数对16位数据的两个字节进行循环移位处理,通过交换半字节位置实现行移位操作,进一步扩散数据位,提升加密效果。 ③ 密钥扩展算法   根据主密钥生成各轮加密所需的轮密钥。通过循环移位、字节替换(调用 subNibbles )和轮常量(Rcon)异或运算,确保每轮密钥的独立性与安全性,为加密过程提供密钥支持。 4. 设计创新与关键技术 4.1 创新设计 1. 紧凑状态表示:采用16位 unsigned short 类型存储加密状态,相比标准AES算法(128位数据块)节省87.5%内存空间(节省率 = 1 - 16/128 = 87.5%),在教学场景下显著降低资源消耗,同时不影响核心加密逻辑验证。 2. 二进制优化:大量运用位运算(如 >> 、 << 、 & )实现行移位和S-Box操作,减少数据类型转换开销,提升算法执行效率,契合对称加密对性能的要求。 4.2 关键技术 1. 列混淆算法:基于有限域GF(2^4)实现矩阵变换,通过特定的乘法和异或运算(如 (u1 * 2) ^ (u2 * 3) )对数据进行线性混淆,确保数据在列方向上的充分扩散,增强加密强度。 2. 密钥调度算法:结合循环移位、S-Box替换和轮常量运算生成轮密钥,使各轮密钥具备差异化特性,防止密钥重用带来的安全风险。 3. S-Box设计:预定义的4x4 S-Box表实现数据的非线性映射,通过置换操作打破明文与密文的线性关系,有效抵御统计分析攻击,是加密算法安全性的核心保障。 5. 结论 本实训项目成功实现了Simplified AES加密算法,完整涵盖以下核心功能: 1. 完成16位数据从明文到密文的全流程加密操作。 2. 实现2轮完整加密过程,包含轮密钥加、字节替换、行移位和列混淆等关键步骤。 3. 构建可靠的轮密钥生成算法,确保每轮加密的密钥独立性。 4. 输出符合加密标准的二进制密文,经测试验证加密结果的准确性。 通过本次实训,不仅验证了AES加密算法的理论可行性,还将抽象的密码学原理转化为可执行代码,加深了对对称加密技术的理解。同时,模块化设计与优化技术的应用,为后续密码学算法研究和工程实践积累了经验。 这篇文章的参考文献
06-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值