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

思路:在设计的时候,考虑用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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值