Skip to content

datawine/arduino_m1_project

Repository files navigation

arduino_m1_project

设计方案

整个系统由一个主服务器和若干具体客户服务器组成。 因为arduino要求每个ino文件在相同名字的文件夹下,所以四个文件夹

M1卡的结构

现在的设计是

  • date_blockaddr:块4,用于存储卡的有效日期
    • 起始日期:8个字节
    • 终止日期:8个字节
  • stu_info:块5-6,用于存储学生信息,学生信息包括:
    • 姓名:12个字节 块5(7个字节存储内容,一个字节扩展信息)
    • 性别:1个字节
    • 类别:1个字节
    • 院系:8个字节 块6
    • 学号:5个字节(存储的时候在前面补0,用大端序)
  • money_sum:块8,用于存储零钱信息
    • 零钱总数:8个字节
    • 消费记录条数(因为需要保存最多5条储值或消费记录):1个字节
  • money_record_block:块9-10,12-14记录格式
    • 消费金额:3个字节
    • 消费时间:4个字节
    • 消费地点:8个字节
    • 类型 (充值/消费):1个字节

主服务器

用于存储各种信息。

客户服务器

注册机

注册机需要完成注册新卡、注销旧卡、延长卡的有效期三种工作。 注册新卡需要在UI输入卡的相关信息,将信息写入卡中,并且上传至主服务器存储。 注销旧卡需要在UI选择注销旧卡,删除卡内所有信息,并且删除主服务器的信息。 延长卡的有效期,即延长卡内的有效期信息,并且同步至主服务器存储。 注册机的性质要求联网。

门禁控制

门禁实行联网/断网机制,在启动之时,用户预先输入允许进入的学生卡规则,如:可入院系、可入性别、可入学号范围,这要求门禁能够增删规则。 门禁断网时,直接在本地判断规则,并判断卡的有效期限是否在当前日期内,准入。 门禁联网时,除了在本地判断规则之外,还需要访问服务器,查询该人的信息是否正确,准入。

零钱包

为防止盗刷,零钱包要求联网。每次消费,向卡内和服务器同步余额信息、消费记录(五条)。

安全防范

针对以下不同的场景,我们设计了安全防范:

断网盗刷

断网情况下,只能通过读取卡内信息来实现信息的访问,此时一致性没有办法实现。用户完全有可能在每次使用卡之后还原成原来的信息,从而实现盗刷,所以我们要求零钱包必须联网。 至于门禁属于信息较弱的范围,同时为了联系实际,我们允许断网之后能通过比较宽松的方法实现。

卡内加密强弱

我们尝试通过比较弱的密钥来加密学生的学号信息,同时根据学号,生成更强的随机密钥,来实现对其他部位的加密。

克隆卡

为了防止克隆卡,我们打算采用UID和密钥结合加密的方法。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published