本帖最后由 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[t]=IapReadByte
(0x0400+t);}
if(Dao==1) {if(Jielong[6]!=2){x1=a1[1];x2=a2[1];x3=a3[1];xu=1;}else{x1=Jielong[0];
x2=Jielong[1];x3=Jielong[2];xu=Jielong[3]*100+Jielong[4]*10+Jielong[5];}}
if(Dao==2) {if(Jielong
[13]!=2) {x1=a1[2];x2=a2[2];x3=a3[2];xu=1;}else{
x1=Jielong[7]; x2=Jielong[8];x3=Jielong
[9];xu=Jielong[10]*100+Jielong[11]*10+Jielong[12];}}
if(Dao==3) { if(Jielong[20]!=2) { x1=a1
[3];x2=a2[3];x3=a3[3];xu=1; } else{ x1=Jielong[14];x2=Jielong[15];x3=Jielong
[16];xu=Jielong[17]*100+Jielong[18]*10+Jielong[19];}}
if(Dao==4) { if(Jielong[27]!=2){x1=a1
[4];x2=a2[4];x3=a3[4];xu=1; }else{x1=Jielong[21];x2=Jielong[22];x3=Jielong[23];xu=Jielong[24]
*100+Jielong[25]*10+Jielong[26];}}
if(Dao==5) { if(Jielong[34]!=2) {x1=a1[5];x2=a2[5];x3=a3
[5];xu=1; } else{x1=Jielong[28]; x2=Jielong[29];x3=Jielong[30];xu=Jielong[31]*100+Jielong[32]
*10+Jielong[33];} }
if(Dao==6) { if(Jielong[41]!=2) {x1=a1[6];x2=a2[6];x3=a3[6];xu=1; } else
{x1=Jielong[35];x2=Jielong[36];x3=Jielong[37];xu=Jielong[38]*100+Jielong[39]*10+Jielong[40];} }
if(Dao==7) { if(Jielong[48]!=2) {x1=a1[7];x2=a2[7];x3=a3[7];xu=1; } else{x1=Jielong
[42];x2=Jielong[43];x3=Jielong[44];xu=Jielong[45]*100+Jielong[46]*10+Jielong[47];} }
han=(xu
+x1)%10;
if(han<2) {
data_c=a8[x2]*132307+xu*1+a4[x3]*168+a7[x1]*2+a5[x2]*665+a2[x2]*524+a6[x3]
*364+a3[x2]*257+a8[x3]*231+a5[x1]*275+a6[x2]*9+a1[x2]*37+a8[x2]*83+a6[x3]*139+a2[x1]*87;}
if
((han>1)&&(han<4)) {
data_c=a3[x2]*132320+xu*1+a6[x2]*758+a3[x2]*41+a4[x2]*116+a3[x1]*210+a7[x2]
*130+a2[x1]*266+a5[x3]*280+a2[x3]*149+a7[x3]*159+a1[x1]*452+a3[x1]*57+a8[x3]*557+a5[x2]*75;}
if
((han>3)&&(han<6)) {
data_c=a2[x2]*132306+xu*1+a5[x2]*335+a3[x2]*198+a3[x3]*599+a4[x2]*596+a5
[x3]*674+a3[x3]*307+a4[x3]*122+a6[x2]*72+a1[x1]*150+a1[x1]*193+a7[x1]*148+a8[x2]*99+a1[x1]*73;}
if((han>5)&&(han<8)) {
data_c=a8[x3]*132320+xu*1+a8[x2]*105+a5[x2]*238+a3[x2]*642+a1[x2]*485+a4
[x3]*498+a3[x3]*232+a3[x2]*129+a3[x3]*99+a5[x2]*40+a2[x2]*40+a1[x2]*179+a4[x1]*46+a1[x2]*50;}
if
((han>7)&&(han<10)) {
data_c=a7[x1]*132321+xu*1+a8[x2]*410+a6[x2]*333+a8[x2]*808+a5[x3]*526+a7
[x1]*406+a7[x2]*130+a7[x2]*230+a7[x2]*57+a7[x2]*50+a7[x2]*532+a4[x2]*128+a1[x2]*301+a2[x2]*26;}
/***************************改变区域end *************************/
Lin[0]=data_c%1000000/100000;
Lin[1]=data_c%100000/10000;
Lin[2]=data_c%10000/1000;
Lin[3]=data_c%1000/100;
Lin[4]=data_c%100/10;
Lin[5]=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[t]=0;
} break;
} }
云数据部分代码
ar zu= new Array(); //定义一数bai组
zu=res.data[0].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[0].data.jielong" + wu.dao);
console.log("long--"+long);
var Jielong= new Array();
if (long=='1'||long==undefined){
eval("Jielong[0]=Number(a1["+wu.dao+"])");
eval("Jielong[1]=Number(a2["+wu.dao+"])");eval("Jielong[2]=Number(a3["+wu.dao+"])");
xu=1;
if(wu.dao==20){ Jielong[0]=Number(a1[1]);
Jielong[1]=Number(a1[2]);
Jielong[2]=Number(a1[3]);}
if(wu.dao==21){ Jielong[0]=Number(a2[1]);
Jielong[1]=Number(a2[2]);
Jielong[2]=Number(a2[3]);}
}
else
{
long=long.replace('0', '1'); long=long.replace('0', '1'); long=long.replace('0', '1');
Jielong[0]=Number(long.toString().substring(0,1));
Jielong[1]=Number(long.toString().substring(1,2));
Jielong[2]=Number(long.toString().substring(2,3));
eval("var xu=res.data[0].data.xu" + wu.dao);
}
}
console.log("xu--"+xu);
console.log("longzu--"+Jielong);
var yh=Number(xu)+Number(Jielong[0]);
var yha=yh.toString();var yhan=yha.substring(yha.length-1,yha.length);xz
if(yhan<2) {var s=res.data[0].data.han;}
if((yhan>1)&&(yhan<4)) {var s=res.data[0].data.han2;}
if((yhan>3)&&(yhan<6)) {var s=res.data[0].data.han3;}
if((yhan>5)&&(yhan<8)) {var s=res.data[0].data.han4;}
if((yhan>7)&&(yhan<10)) {var s=res.data[0].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会暴露,已经失去了**的意义.
可以添加校验码开锁功能,这个功能只是在序列密码失败时候,校验开锁的一种方法.也可以动态的为数组变身,
在接受到特殊的密码后,数组动态累加变形,也就变成了新的密码锁.当然变形因数,也会同步到云数据库,云数
据同样的累加计算.
**和反**从来都是技术上的一种火拼.在接触算法内核时,你会发现每动一个小小的变量,结果都会大不一
样的.你可以有海量的方法去改进你的加密算法.或可以找到云端和芯片端,共同的哈稀算法.
五 未来
配送权限和开箱权限完全分开。配送员只能移动运输,但不能打开。这样就非常方便“捎”货的配送方式。
利
用公交车,私家车,个人等任何移动单元,安全“捎”
货,廉价算法“捎”货。综合利用各种运力剩余,对降
低配送费,对社会低炭减排都会有明显效果。任意位置
放置,可以满足客户火车上取出自己定制的食品,景
区
内提出小吃街的美食,家门口个人公交箱自提超市的任意商品。约定的时间,约定的地点,取出自己需要的商
品.客户随心所物体验.
|
好东东