思路:在设计的时候,考虑用tea算法实现加密过程,利用随机数的生成生成加密的字符串,加密的字符串发送给手机,手机解码之后发送,如果与单片机的数据一致,则可以通过,不一致,则以电机的转动来表示报警。

遇到的问题:loop循环在手机解密和发送的过程中会继续进行

解决办法:以电机的转动状态来表示循环的进行程度

代码如下:

#include <Servo.h>
Servo myservo;

String str;
boolean flag = true;

void setup() {
  // put your setup code here, to run once:
  myservo.attach(9);
  Serial.begin(9600);
}

void loop() {

// v为要加解密的数据,两个32位无符号整数
    uint32_t v[2] = { random(100),random(100) };
    // k为加解密密钥,4个32位无符号整数,密钥长度为128位
    uint32_t k[4] = { 1,2,3,4 };
    int n = sizeof(v) / sizeof(uint32_t);
  if(flag){
    
    encrypt(v, k);
    Serial.println(v[1]);
    decrypt(v, k);

}

flag = false;
    
  while(Serial.available())
  {
    //从软件串口读出一字节,写入硬件串口
    flag = true;
    str += (char)Serial.read();
    delay(20);
  }
  if(str == v[1]){
      myservo.write(90);        
      delay(500);
    }else{
        myservo.write(0);   
        delay(500);
      }
  str = "";
 
}

//加密函数
void encrypt(uint32_t* v, uint32_t* k) {
  uint32_t v0 = v[0], v1 = v[1], sum = 0, i;
  uint32_t delta = 0x9e3779b9;
  uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];
  for (i = 0; i < 32; i++) {
    sum += delta;
    v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
    v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
  }
  v[0] = v0; v[1] = v1;
}

//解密函数
void decrypt(uint32_t* v, uint32_t* k) {
  uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i;
  uint32_t delta = 0x9e3779b9;
  uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];
  for (i = 0; i<32; i++) {
    v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
    v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
    sum -= delta;
  }
  v[0] = v0; v[1] = v1;
}

物联网导论课设作业安全系统的代码相关推荐

  1. Python 小型课设作业,仅200行代码,使用youtube-dl下载视频,使用OpenCV和ffmpeg处理视频成字符视频

    一.程序背后的小故事:    因为不想像传统的课设作业一样做一个很多人做过的小游戏,管理程序等,所以花了很长时间在选择一个有趣的程序方向,突然想起来以前看到的字符跳舞视频,突然引起了我的兴趣.分析字符 ...

  2. java课程设计总结迷宫_java课设走迷宫(含代码)#优质参考

    java课设走迷宫(含代码)#优质参考 目录1设计目的1.1课程设计的目的2总体设计2.1设计思路2.2设计方法3关键技术4程序流程5主要源代码6. 运行结果及结论7.参考文献1.设计目的1.1课程设 ...

  3. 一元稀疏多项式计算器 【 数据结构课设作业 】 带界面,无bug,可以直接运行

    一元稀疏多项式计算器 问题描述 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立多项式. (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,-,cn,en,其中n是多项式 ...

  4. 数据结构课设城市公交完整代码(c语言)

    以下是城市公交的完整代码,如果需要实验报告的可以点击下面的链接: 数据结构课设城市公交查询系统(C语言) 代码如下: #include <stdio.h> #include <str ...

  5. 基于云开发的校园社区小程序 微信小程序开发实战 课设作业

       ...... 完整课设文档和小程序源代码可在资源下载处下载

  6. PHP学生成绩管理,使用MySQL数据库,界面简洁,适合当做学生期末课设作业,有数据库和PHP文件源码,没有使用任何框架,都是使用简单的PHP代码

    PHP学生成绩管理,使用MySQL数据库,界面简洁,适合当做学生期末作业,有数据库和PHP文件源码,没有使用任何框架,都是使用简单的PHP代码. 实现功能包括:学生登录 管理员登录 学生信息管理 学生 ...

  7. c语言学生成绩管理系统课设作业,C语言课程设计——学生成绩管理系统

    摘 要 学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段.但一直以来人们使用传统人工的方式 ...

  8. java课设小迷宫含代码_Java小项目之迷宫游戏的实现方法

    项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格.任何时候都不能在有 ...

  9. c语言 杨平 答案,C语言课设作业模版.doc

    分析设计与说明 分别建立两个数据文件 文件1(c.txt)用于存放学生成绩: 文件2(xuefen.txt)用于存放课程及其学分. 程序设计思想 (1)学生成绩管理系统 1读入原始数据并显示(将其读入 ...

最新文章

  1. ibatis轻松入门
  2. 企业级日志收集系统——ELKstack
  3. QuickStart系列:docker部署之MariaDB
  4. 推荐ReactNative脚手架工具
  5. 10个高效Linux技巧及Vim命令对比
  6. 记录使用IDEA部署Tomcat时提示错误:the selected directory is not a TomEE home
  7. 图画日记怎么画_小学生绘画日记
  8. DMA控制器原理详解
  9. c#打包安装程序[VS2010]
  10. c# excel 数据排序_在Excel中对数据进行安全排序
  11. Windows7配置docker配置registry-mirrors国内镜像地址,运行hello-world
  12. SmartNIC — TSO、GSO、LRO、GRO 技术
  13. bzoj3786: 星系探索 //ETT
  14. 河南科技学院计算机对口分数线,2010年河南科技学院对口招生分数线是多少?...
  15. [附源码]JAVA+ssm基于Internet快递柜管理系统(程序+Lw)
  16. html文件的启示标记,某html学习心得分享.ppt
  17. SMBMS超市订单管理系统(一)
  18. VS2010启动后鼠标失灵解决方法
  19. LPspice 电路仿真软件
  20. Carla车辆周围添加障碍物

热门文章

  1. NSArray的用法
  2. linux 个人云存储_评测 | 我的轻型影像数据基地——联想个人云存储A1试用
  3. centos7安装达梦数据库dm8
  4. vue $refs基本使用
  5. 如何让一句话木马绕过waf的检测 ?
  6. 基于表单自定义与工作流的费用管理系统
  7. 小进规,武汉市小微服务业企业进入规模服务业企业条件指南
  8. PAIN:慢性颈痛患者核心节点破坏:一种图分析方法
  9. 同事辞职,留下了它 -让所有人都惊呆了!
  10. array_sort的使用