1.3元单片机实现动态密码移动收件箱 售货箱
本帖最后由 topofhill 于 2022-3-23 15:54 编辑#申请原创#
一工作原理
每条云数据库记录对应一个单片机,保存同样的随机数组和函数,同步累加计算的序列,任何时候可以得到同样的动态密码.
二优势对比
1.成本廉价
2.任意移动
电池供电,可任意移动或存放.
3.任意形状
一个sop8芯片加开关管电路,体积小,适合装配成任意外观设备,可以适应社会任意环境.
3.非联网验证
物品联网验证,会涉及通讯稳定性和安全性。一些拦截,屏蔽,伪造,**等,攻击手段可用。
且通信费,硬件成本高。而非联网验证只会有**一种方法攻击,加强密码算法,和联合验证码验证。可以更简单更廉价更安全第地实现用户快捷验证。
4.用户信息安全
使用用户微信openid 定购产品到收货箱,配送到用户附近街道,发送动态密码给用户微信.全程不获取用户手机号及地址信息完成配送。
可以应用于动态密码移动收件箱 售货箱,无人值守门禁系统,或其它非联网须认证设备.
三 实例解析
单通道箱,内控芯片,我使用的是1.3元的stc8g1k08sop8,它的内存足够几百组随机数和几十条运算函数.程序很简单,就是核对外部过来的密码是否和自己生成的一样.相同则控制开关管开锁,不同则返回错误信息.外部手
柄.我使用2.3元stc8g1k08sop16.加上几毛的语音芯片,喇叭,电池,触摸延时电源管理.共十几元.手柄和内控
通过Type-c接口通信和为内控供电.手柄主要负责密码累积,够6位后传入内控判断.播报密码输入语音.播报开
锁状态.控制指示灯,管理电源休眠省电.当然也可以使用红外通信,或底座供电手机nfc碰碰直接开锁.
单片机部分代码
void suan()
{ uint h1,h2,h3,x1,x2,x3;
uint t,i,xu,han;
for(t=0;t<50;t++){Jielong=IapReadByte
(0x0400+t);}
if(Dao==1) {if(Jielong!=2){x1=a1;x2=a2;x3=a3;xu=1;}else{x1=Jielong;
x2=Jielong;x3=Jielong;xu=Jielong*100+Jielong*10+Jielong;}}
if(Dao==2) {if(Jielong
!=2) {x1=a1;x2=a2;x3=a3;xu=1;}else{
x1=Jielong; x2=Jielong;x3=Jielong
;xu=Jielong*100+Jielong*10+Jielong;}}
if(Dao==3) { if(Jielong!=2) { x1=a1
;x2=a2;x3=a3;xu=1; } else{ x1=Jielong;x2=Jielong;x3=Jielong
;xu=Jielong*100+Jielong*10+Jielong;}}
if(Dao==4) { if(Jielong!=2){x1=a1
;x2=a2;x3=a3;xu=1; }else{x1=Jielong;x2=Jielong;x3=Jielong;xu=Jielong
*100+Jielong*10+Jielong;}}
if(Dao==5) { if(Jielong!=2) {x1=a1;x2=a2;x3=a3
;xu=1; } else{x1=Jielong; x2=Jielong;x3=Jielong;xu=Jielong*100+Jielong
*10+Jielong;} }
if(Dao==6) { if(Jielong!=2) {x1=a1;x2=a2;x3=a3;xu=1; } else
{x1=Jielong;x2=Jielong;x3=Jielong;xu=Jielong*100+Jielong*10+Jielong;} }
if(Dao==7) { if(Jielong!=2) {x1=a1;x2=a2;x3=a3;xu=1; } else{x1=Jielong
;x2=Jielong;x3=Jielong;xu=Jielong*100+Jielong*10+Jielong;} }
han=(xu
+x1)%10;
if(han<2) {
data_c=a8*132307+xu*1+a4*168+a7*2+a5*665+a2*524+a6
*364+a3*257+a8*231+a5*275+a6*9+a1*37+a8*83+a6*139+a2*87;}
if
((han>1)&&(han<4)) {
data_c=a3*132320+xu*1+a6*758+a3*41+a4*116+a3*210+a7
*130+a2*266+a5*280+a2*149+a7*159+a1*452+a3*57+a8*557+a5*75;}
if
((han>3)&&(han<6)) {
data_c=a2*132306+xu*1+a5*335+a3*198+a3*599+a4*596+a5
*674+a3*307+a4*122+a6*72+a1*150+a1*193+a7*148+a8*99+a1*73;}
if((han>5)&&(han<8)) {
data_c=a8*132320+xu*1+a8*105+a5*238+a3*642+a1*485+a4
*498+a3*232+a3*129+a3*99+a5*40+a2*40+a1*179+a4*46+a1*50;}
if
((han>7)&&(han<10)) {
data_c=a7*132321+xu*1+a8*410+a6*333+a8*808+a5*526+a7
*406+a7*130+a7*230+a7*57+a7*50+a7*532+a4*128+a1*301+a2*26;}
/***************************改变区域end*************************/
Lin=data_c%1000000/100000;
Lin=data_c%100000/10000;
Lin=data_c%10000/1000;
Lin=data_c%1000/100;
Lin=data_c%100/10;
Lin=data_c%10;
// yin6(Lin); yin6(Ru);
for(i=0;i<6;)
{
if(Lin==Ru) //将两次输入的新
i++;
else
//如果两次的密码不同
{ // N=0;
speak(14);while
(yybuzy==0);
if(Dao<10){ speak(Dao+1);while(yybuzy==0);}
else{ speak(2);while(yybuzy==0);
speak(Dao
%10+1);while(yybuzy==0);}
speak(13);while(yybuzy==0);
for(t=0;t<6;t++)
//将输入清除
{
Ru=0;
}break;
} }
云数据部分代码
ar zu= new Array(); //定义一数bai组
zu=res.data.data.shuzu.split("|"); //字符分割
for (i=0;i<zu.length ;i++ )
{
eval("var a" + i + "=new Array()");
eval("a" + i + "=zu[" + i + "].split(',')");
}
if(wu.dao>0){
eval("var long=res.data.data.jielong" + wu.dao);
console.log("long--"+long);
var Jielong= new Array();
if (long=='1'||long==undefined){
eval("Jielong=Number(a1["+wu.dao+"])");
eval("Jielong=Number(a2["+wu.dao+"])");eval("Jielong=Number(a3["+wu.dao+"])");
xu=1;
if(wu.dao==20){ Jielong=Number(a1);
Jielong=Number(a1);
Jielong=Number(a1);}
if(wu.dao==21){ Jielong=Number(a2);
Jielong=Number(a2);
Jielong=Number(a2);}
}
else
{
long=long.replace('0', '1');long=long.replace('0', '1');long=long.replace('0', '1');
Jielong=Number(long.toString().substring(0,1));
Jielong=Number(long.toString().substring(1,2));
Jielong=Number(long.toString().substring(2,3));
eval("varxu=res.data.data.xu" + wu.dao);
}
}
console.log("xu--"+xu);
console.log("longzu--"+Jielong);
var yh=Number(xu)+Number(Jielong);
var yha=yh.toString();var yhan=yha.substring(yha.length-1,yha.length);xz
if(yhan<2) {var s=res.data.data.han;}
if((yhan>1)&&(yhan<4)) {var s=res.data.data.han2;}
if((yhan>3)&&(yhan<6)) {var s=res.data.data.han3;}
if((yhan>5)&&(yhan<8)) {var s=res.data.data.han4;}
if((yhan>7)&&(yhan<10)) {var s=res.data.data.han5;}
eval("s="+s);
console.log(s)
js批量生成主要语句
var zu= new Array();
for(i=0;i<1500;i++){
b=Number(Math.round(Math.random()*8))+1;
zu=b;
}
五通道和单通道类似,百通道需要窜口扩展,原理都是一样.
四 密码安全
没有绝对安全的方法,只有相对安全的算法.
我们可以选取几千位的随机数组,动态地指向数组的几个数,取值固定运算,动态截取一小段,做为新的密码.由于它是截取运算后的,不完整的一个小段,反向推理**是不可能的.设备本身不联网,不存在黑客攻击设备,或
拦截通讯的可能.但是如果**了一片芯片,得到生成随机数组的模板,再加上获取相邻的几个动态密码.动用大
型计算机,猜数组,对比相邻密码的方法.**还是有可能的.如果我们用动态模板呐,用函数变量生成上万的模
板.使每个芯片的数据模板都不一样.让攻击者**了几百个芯片,找不到任何规律,况且他在找规律,获取动态
密码时,我们后台是有记录的.在获取相邻敏感密码时.他的ID会暴露,已经失去了**的意义.
可以添加校验码开锁功能,这个功能只是在序列密码失败时候,校验开锁的一种方法.也可以动态的为数组变身,
在接受到特殊的密码后,数组动态累加变形,也就变成了新的密码锁.当然变形因数,也会同步到云数据库,云数
据同样的累加计算.
**和反**从来都是技术上的一种火拼.在接触算法内核时,你会发现每动一个小小的变量,结果都会大不一
样的.你可以有海量的方法去改进你的加密算法.或可以找到云端和芯片端,共同的哈稀算法.
五未来
配送权限和开箱权限完全分开。配送员只能移动运输,但不能打开。这样就非常方便“捎”货的配送方式。
利
用公交车,私家车,个人等任何移动单元,安全“捎”
货,廉价算法“捎”货。综合利用各种运力剩余,对降
低配送费,对社会低炭减排都会有明显效果。任意位置
放置,可以满足客户火车上取出自己定制的食品,景
区
内提出小吃街的美食,家门口个人公交箱自提超市的任意商品。约定的时间,约定的地点,取出自己需要的商
品.客户随心所物体验.
电梯直达楼主
topofhill| 楼主 | 2022-3-22 17:35 | 只看该作者 |只看大图
本帖最后由 topofhill 于 2022-3-23 15:54 编辑
#申请原创#
一 工作原理
每条云数据库记录对应一个单片机,保存同样的随机数组和函数,同步累加计算的序列,任何时候可以得到同样的动态密码.
二 优势对比
1.成本廉价
2.任意移动
电池供电,可任意移动或存放.
3.任意形状
一个sop8芯片加开关管电路,体积小,适合装配成任意外观设备,可以适应社会任意环境.
3.非联网验证
物品联网验证,会涉及通讯稳定性和安全性。一些拦截,屏蔽,伪造,**等,攻击手段可用。
且通信费,硬件成本高。而非联网验证只会有**一种方法攻击,加强密码算法,和联合验证码验证。可以更简单更廉价更安全第地实现用户快捷验证。
4.用户信息安全
使用用户 微信openid 定购产品到收货箱,配送到用户附近街道,发送动态密码给用户微信.全程不获取用户手机号及地址信息完成配送。
可以应用于动态密码移动收件箱 售货箱,无人值守门禁系统,或其它非联网须认证设备.
三 实例解析
单通道箱,内控芯片,我使用的是1.3元的stc8g1k08 sop8,它的内存足够几百组随机数和几十条运算函数.程序很简单,就是核对外部过来的密码是否和自己生成的一样.相同则控制开关管开锁,不同则返回错误信息.外部手
柄.我使用2.3元stc8g1k08 sop16.加上几毛的语音芯片,喇叭,电池,触摸延时电源管理.共十几元.手柄和内控
通过Type-c接口通信和为内控供电.手柄主要负责密码累积,够6位后传入内控判断.播报密码输入语音.播报开
锁状态.控制指示灯,管理电源休眠省电.当然也可以使用红外通信,或底座供电手机nfc碰碰直接开锁.
单片机部分代码
void suan()
{ uint h1,h2,h3,x1,x2,x3;
uint t,i,xu,han;
for(t=0;t<50;t++){Jielong=IapReadByte
(0x0400+t);}
if(Dao==1) {if(Jielong!=2){x1=a1;x2=a2;x3=a3;xu=1;}else{x1=Jielong;
x2=Jielong;x3=Jielong;xu=Jielong*100+Jielong*10+Jielong;}}
if(Dao==2) {if(Jielong
!=2) {x1=a1;x2=a2;x3=a3;xu=1;}else{
x1=Jielong; x2=Jielong;x3=Jielong
;xu=Jielong*100+Jielong*10+Jielong;}}
if(Dao==3) { if(Jielong!=2) { x1=a1
;x2=a2;x3=a3;xu=1; } else{ x1=Jielong;x2=Jielong;x3=Jielong
;xu=Jielong*100+Jielong*10+Jielong;}}
if(Dao==4) { if(Jielong!=2){x1=a1
;x2=a2;x3=a3;xu=1; }else{x1=Jielong;x2=Jielong;x3=Jielong;xu=Jielong
*100+Jielong*10+Jielong;}}
if(Dao==5) { if(Jielong!=2) {x1=a1;x2=a2;x3=a3
;xu=1; } else{x1=Jielong; x2=Jielong;x3=Jielong;xu=Jielong*100+Jielong
*10+Jielong;} }
if(Dao==6) { if(Jielong!=2) {x1=a1;x2=a2;x3=a3;xu=1; } else
{x1=Jielong;x2=Jielong;x3=Jielong;xu=Jielong*100+Jielong*10+Jielong;} }
if(Dao==7) { if(Jielong!=2) {x1=a1;x2=a2;x3=a3;xu=1; } else{x1=Jielong
;x2=Jielong;x3=Jielong;xu=Jielong*100+Jielong*10+Jielong;} }
han=(xu
+x1)%10;
if(han<2) {
data_c=a8*132307+xu*1+a4*168+a7*2+a5*665+a2*524+a6
*364+a3*257+a8*231+a5*275+a6*9+a1*37+a8*83+a6*139+a2*87;}
if
((han>1)&&(han<4)) {
data_c=a3*132320+xu*1+a6*758+a3*41+a4*116+a3*210+a7
*130+a2*266+a5*280+a2*149+a7*159+a1*452+a3*57+a8*557+a5*75;}
if
((han>3)&&(han<6)) {
data_c=a2*132306+xu*1+a5*335+a3*198+a3*599+a4*596+a5
*674+a3*307+a4*122+a6*72+a1*150+a1*193+a7*148+a8*99+a1*73;}
if((han>5)&&(han<8)) {
data_c=a8*132320+xu*1+a8*105+a5*238+a3*642+a1*485+a4
*498+a3*232+a3*129+a3*99+a5*40+a2*40+a1*179+a4*46+a1*50;}
if
((han>7)&&(han<10)) {
data_c=a7*132321+xu*1+a8*410+a6*333+a8*808+a5*526+a7
*406+a7*130+a7*230+a7*57+a7*50+a7*532+a4*128+a1*301+a2*26;}
/***************************改变区域end *************************/
Lin=data_c%1000000/100000;
---------------------
页:
[1]