蓝牙鉴权
本文最后更新于 2024-03-21,文章内容可能已经过时。
需求背景
当前蓝牙连接没有做限制,任何人都可以通过蓝牙连接到设备并进行操控,为了加强安全性,提出要做蓝牙鉴权功能
编码思路
首先规定一串有规律的文字,例如"zhouri-年月日时分秒-设备id"这样的文字
连接方(小程序)在连接时拼接文字后发送计算得到的md5
接收方(设备)根据当前时间和当前设备名称拼接字符串之后计算md5并和收到的比对,一致则为通过,会更新token过期时间
具体代码
#include <openssl/md5.h>
void compute_md5(char *str, unsigned char digest[16]) {
MD5_CTX context;
MD5_Init(&context);
MD5_Update(&context, str, strlen(str));
MD5_Final(digest, &context);
}
int main(){
unsigned char digest[16];
char token[100];
char mdString[33];
// 拼接指定形式的字符串并计算md5
sprintf(token, "zhouri-%s", current_time);
compute_md5(token, digest);
for(int i = 0; i < 16; i++){
sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);
}
// logger(6, LOG_SERVICE, "%s MD5 digest: %s\n", token, mdString);
// printf("%s MD5 digest: %s\n", token, mdString);
// buf是蓝牙接收的内容,由于
size_t pos = strcspn(buf, " \t\n\0"); // 找到第一个空格、制表符或换行符的位置
buf[pos] = '\0';
logger(6, LOG_SERVICE, "change buf: %s\n", buf);
printf("change buf: %s\n", buf);
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 周日
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果