搜索
bottom↓
回复: 149

需要做一个算法,利用时间搓来做同步密码,帮解决发1K红包

  [复制链接]

出0入0汤圆

发表于 2018-5-8 21:49:05 | 显示全部楼层 |阅读模式
做了一款密码锁,在不联网的情况下后台根据时间搓来生成一个6位密码,用户拿到这个密码在门锁上输入可以打开门锁,(锁是不联网的)
这个密码是有有效期的,比如设计开始时间是(年月日时 18-05-08-21  )结束时间  (年月日时 18-05-08-22  )有效时间是一个小时。
这个密码通过算法算出,进入参数是  :开始时间 +结束时间 +密码类型     输出密码是个6位0到9的字符,知道这6位密码字符可以推算出之前的参数(开始时间 +结束时间 +密码类型)密码类型可以用2位来表示4种不同的类型  00 01 10 11

看能不能通过一个算法如  :
    开始时间(年月日时 18-05-08-21  )+结束时间 (年月日时 18-05-08-22  )+密码类型 (01)     =6位0到9的字符密码   

  反之通过  6位0到9的字符密码   计算出 开始时间(年月日时 18-05-08-21  )+结束时间 (年月日时 18-05-08-22  )+密码类型 (01)

  看有没有做过这块的,如果能提供一个算法我们测试OK,给发大大的红包,不少于1K

有不明白的可以向我了解详情。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出235入235汤圆

发表于 2018-5-8 21:57:55 | 显示全部楼层
这样安全系数会不会很低?
1、因为时间段是固定的,因此你的“起始时间”和“结束时间”只是1个参数。
2、锁的时间怎么同步呢?

出235入235汤圆

发表于 2018-5-8 22:03:04 | 显示全部楼层
我觉得至少还要一个“变量”,这个变量服务器和锁都可以被记录。。“上一次使用此类型密码的时间”。
比如3月20日3点授权过一次,现在5月8日22点又要授权。。那么生成密码的规律至少 是   032003,050822,密码类型,锁ID。。混合的一个特殊算法。。


个人理解。

出0入0汤圆

发表于 2018-5-8 22:08:02 | 显示全部楼层
6位覆盖不了这么多数据

出0入0汤圆

发表于 2018-5-8 22:13:34 | 显示全部楼层
LZ, 你这关键问题是 6 位数字包含不了这么多信息啊,如果完全脱机的话,算上签名数据量得奔 100 字节去了吧

出0入0汤圆

发表于 2018-5-8 22:15:36 | 显示全部楼层
可以变通一下么,我简单点出个思路:
程序里放一张表格,内容是0-9,表示算法代号,比如说1表示CRC16、2表示CRC32、3表示累加和、4表示异或等等……
假设6位密码分别涉及算法代号、明文、密文(校验码),再配合顺序颠倒等等。
密码锁读到数据之后,计算是否合法不就完事了?
=========================================
如果不介意的话,给你推荐一本小人书——漫画
三谷政昭/佐藤伸编写的那啥?楼下补充!(好像本论坛里有的曾经上传过的)

出0入0汤圆

 楼主| 发表于 2018-5-8 22:18:18 | 显示全部楼层
lyping1987 发表于 2018-5-8 21:57
这样安全系数会不会很低?
1、因为时间段是固定的,因此你的“起始时间”和“结束时间”只是1个参数。
2、 ...

先不考虑安全系数,锁里有个RTC的,在联网的时候可以设置时间的。

出0入0汤圆

 楼主| 发表于 2018-5-8 22:19:44 | 显示全部楼层
shiva_shiva 发表于 2018-5-8 22:08
6位覆盖不了这么多数据

同行有人做出来了,测试的确有效   所以6位字符很难算,我们目前怎么算都需要10位字符

出0入0汤圆

 楼主| 发表于 2018-5-8 22:20:58 | 显示全部楼层
wudicgi 发表于 2018-5-8 22:13
LZ, 你这关键问题是 6 位数字包含不了这么多信息啊,如果完全脱机的话,算上签名数据量得奔 100 字节去了吧 ...

只算出厂开始算  后20年的时间,最少也要5年时间

出0入0汤圆

 楼主| 发表于 2018-5-8 22:23:48 | 显示全部楼层
sharehej 发表于 2018-5-8 22:15
可以变通一下么,我简单点出个思路:
程序里放一张表格,内容是0-9,表示算法代号,比如说1表示CRC16、2表 ...

推荐过来看看,表格也不好弄吧,才10个表,算出来的数可以千变万化

出0入0汤圆

发表于 2018-5-8 22:25:25 | 显示全部楼层
开始时间到结束时间的差是固定值吗?
有效时间5年就可以?

总觉得楼主忽略掉什么东西,不如把对手的产品说明发出来看看,到底是干什么的?

出0入0汤圆

发表于 2018-5-8 22:27:34 来自手机 | 显示全部楼层
直接用时间戳,四个字节记录时间,如果换算成小时可以再省几个bit ,把省得和下一个字节当做间隔的小时数,剩下一个系列做密码类型,之后整个用一个算法加密混淆

出0入0汤圆

发表于 2018-5-8 22:27:34 来自手机 | 显示全部楼层
直接用时间戳,四个字节记录时间,如果换算成小时可以再省几个bit ,把省得和下一个字节当做间隔的小时数,剩下一个系列做密码类型,之后整个用一个算法加密混淆

出0入0汤圆

 楼主| 发表于 2018-5-8 22:28:37 | 显示全部楼层
本帖最后由 mfkqqw 于 2018-5-8 22:29 编辑

年最少需要二进制 5位
月需要二进制     4位
日需要二进制  5位
时需要二进制  5位

这样算下来开始时间需要 19位   

出0入0汤圆

 楼主| 发表于 2018-5-8 22:33:33 | 显示全部楼层
本帖最后由 mfkqqw 于 2018-5-8 22:36 编辑




年最少需要二进制 5位
月需要二进制     4位
日需要二进制  5位
时需要二进制  5位

开始时间需要 19位          结束也是19位    加上2位类型,,共 40位   =5个字节  


5个字节可以包含起始日期和类型,然后看怎么转为6个字符,6个字符也可以回算成  5个字节的原始数据

出0入0汤圆

发表于 2018-5-8 22:33:59 | 显示全部楼层
感觉OFO的手动输入密码就是这样的

出0入0汤圆

发表于 2018-5-8 22:37:10 | 显示全部楼层
你要的功能和银行的电子口令一样,随机生成一个密钥串

论坛以前有讨论,好像就是用的时间戳,具体的你搜一下吧,软件方面我是菜鸟

出0入0汤圆

发表于 2018-5-8 22:37:23 | 显示全部楼层
怎么像以前玩游戏的时候将军令之流的啊!

出0入0汤圆

发表于 2018-5-8 22:42:32 | 显示全部楼层
本帖最后由 3DA502 于 2018-5-8 22:44 编辑

一天24小时 24*365 =8760
时间起点是2018,作为0,2019为1,2028为9

剩下一个位是随机0-9,指向10个混淆函数的其中一个,混淆函数把时间,机器序列号一起,打乱成密码

出0入0汤圆

 楼主| 发表于 2018-5-8 22:47:31 | 显示全部楼层
3DA502 发表于 2018-5-8 22:42
一天24小时 24*365 =8760
时间起点是2018,作为0,2019为1,2028为9

指向10个混淆函数的其中一个?不明白,能说详细点吗,
年可以省下一位,不错

出0入0汤圆

 楼主| 发表于 2018-5-8 22:49:10 | 显示全部楼层
3DA502 发表于 2018-5-8 22:42
一天24小时 24*365 =8760
时间起点是2018,作为0,2019为1,2028为9

生成6位字符密码,还要通过 6位字符密码算回去的

出0入14汤圆

发表于 2018-5-8 22:54:01 | 显示全部楼层
mfkqqw 发表于 2018-5-8 22:33
年最少需要二进制 5位
月需要二进制     4位
日需要二进制  5位

可以拿1000红包了

出235入235汤圆

发表于 2018-5-8 22:55:39 | 显示全部楼层
mfkqqw 发表于 2018-5-8 22:33
年最少需要二进制 5位
月需要二进制     4位
日需要二进制  5位

年月日不用单独记录,你可以同一按例如2017040803这个作为时间戳0,再次基础上每小时+1(自己的内部的时间戳)按20年算,18位。5个字节,最后一个字节是5个自己排列组合的顺序(查表)。

如果是6个数字的话。
前面5个是时间戳,10年的小时数是68400,5位10进制就可以表达时间。其中1位0-9代表存储5位数字的排列组合顺序。。第六位是固定的位置,前5位根据第六位的顺序反算出时间,再与当前时间戳对比就行。

出0入0汤圆

发表于 2018-5-8 22:55:54 | 显示全部楼层
本帖最后由 sharehej 于 2018-5-8 23:35 编辑
mfkqqw 发表于 2018-5-8 22:23
推荐过来看看,表格也不好弄吧,才10个表,算出来的数可以千变万化


打个比方说,你密码需要5分钟更新一次

你利用时间戳产生一组明文,比如:
累加和
201805082240 = 11
201805082241 = 12
201805082242 = 13
201805082243 = 14
201805082244 = 15
异或
201805082240 = 26
201805082241 = 27
201805082242 = 28
201805082243 = 29
201805082244 = 30
(你不管我这个数值是否正确,我瞎写的,只是为了打个比方)
你从里面组合抽数,比如:126、227、328、429、530,这些我定义为明文
假设此刻你使用crc16计算第一个数字校验值,那么对应的代号就是01(我上面楼层假设的),校验出来的CRC16校验码数据截取后两位是56(ABCDEF分别用012345代替,数字我也是瞎写的,没去计算,就向你表达这么个意思)
最终第一个数字的结果就是126156;
对于锁来说,锁里面有时间,他可以算出每分钟的“明文”,你这6位数的密码已经告诉他算法代号1(表示CRC16),那么锁也能算出连续5分钟的每一个“密文”,和你输入的这6位数里涵盖的密文核对即可,包括在内即表示pass!
=======================================================
我这是胡扯的,你可以根据我这个思路想象一下、拓展一下!
=======================================================以下内容添加:
明文比对,判断是否超时,代号获取算法,根据明文和代号便可得出“密文”,再根据你使用的时钟电路的时间误差和时限来适当放点余量就好了!

出235入235汤圆

发表于 2018-5-8 22:58:15 | 显示全部楼层
时间戳的起始小时数自己内部统一就行,最多10年重复一次。如果觉得还不够,再把5位时间加密一下。

出0入0汤圆

发表于 2018-5-8 23:24:02 | 显示全部楼层
sharehej 发表于 2018-5-8 22:55
打个比方说,你密码需要5分钟更新一次

你利用时间戳产生一组明文,比如:

这个差不多,和银行的ukey原理一直,只是没有在线服务器,改成离线锁了

出0入0汤圆

发表于 2018-5-8 23:24:25 | 显示全部楼层
如果我理解没错的话,楼主是说6个数字,而非6个字节。
那么按照使用10年来算的话,总共10*365*24=87600小时,那么就约定一个公用的基准时间,并以小时作为粒度。这样就可以推算出当前时间。
因此:
起始时间使用5个数字。
结束时间使用最后一个数字的0~5,表示相比起始时间延长N个小时(总不能结束时间比起始时间小吧,因此不需要考虑负数的情况)。
密码类型使用最后一个数字的6~9来表示,如果结束时间使用的那个数字是X,那么X-6就表示密码类型。
唯一的缺陷就是结束时间相比起始时间不能超过6个小时。

出0入0汤圆

发表于 2018-5-9 07:36:26 来自手机 | 显示全部楼层
楼主你这个问题是一个比较复杂的数学问题,如果有兴趣的话站短我,需要确认些细节

出0入0汤圆

发表于 2018-5-9 08:00:23 | 显示全部楼层
一天换一个密码 会很麻烦的, 像以前那个游戏用的,每1分一个密码, 游戏很少用,锁经常开,保险柜感觉又太弱了. 感觉还是密码+算法 组成的钥匙管用

出0入24汤圆

发表于 2018-5-9 08:06:00 | 显示全部楼层
参考一些游戏密保之类的,大约30秒生成一个密码

出0入0汤圆

发表于 2018-5-9 08:19:48 来自手机 | 显示全部楼层
把rtc的电池取掉,重启后时间重置,密码是不是同一个?

出0入8汤圆

发表于 2018-5-9 08:45:59 | 显示全部楼层
时间搓是啥

出0入0汤圆

发表于 2018-5-9 08:55:53 | 显示全部楼层

时间戳

出0入8汤圆

发表于 2018-5-9 09:02:10 | 显示全部楼层

哈哈,还以为时间出新概念了

出0入169汤圆

发表于 2018-5-9 09:07:23 | 显示全部楼层
可以学习银行的密码器,用RTC通过时间窗口伪随机数列做密码,密码种子自己根据时间加算法就行了。

出0入0汤圆

发表于 2018-5-9 09:10:53 | 显示全部楼层
xuhai777 发表于 2018-5-9 08:19
把rtc的电池取掉,重启后时间重置,密码是不是同一个?

不会的,还有一串随机码的表,没开一次锁会变化重新写入一次flash。
参考网银的动态密码卡。

出0入0汤圆

发表于 2018-5-9 09:20:43 | 显示全部楼层
以小时为LSB,  从2018-05-01记为0    20年后经过的时间为   20*365*24 = 175200小时.  对应十六进制 2AC60  .共5个字节.   认真算,还有8+6个位可以使用

出0入0汤圆

发表于 2018-5-9 09:27:40 | 显示全部楼层
这个很有意思

出0入0汤圆

发表于 2018-5-9 09:37:38 来自手机 | 显示全部楼层
给你提醒一点,服务器还要做同步,根据生成的数字调整服务器的时间系数

出0入0汤圆

发表于 2018-5-9 09:42:29 | 显示全部楼层
现在的智能锁,都有这功能,不用楼主页写的这么复杂

出0入0汤圆

发表于 2018-5-9 09:47:39 | 显示全部楼层
sharehej 发表于 2018-5-8 22:15
可以变通一下么,我简单点出个思路:
程序里放一张表格,内容是0-9,表示算法代号,比如说1表示CRC16、2表 ...

漫画密码吗,没搜到,传一个上来吧.

出0入0汤圆

发表于 2018-5-9 09:50:51 | 显示全部楼层
本帖最后由 phl 于 2018-5-9 10:23 编辑

这个算法可以解决你的问题,附件为代码

编辑原因:重新上传附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-5-9 09:51:15 | 显示全部楼层
思路1:结束时间,用有效时间+开始时间来代替

出0入0汤圆

发表于 2018-5-9 09:53:00 | 显示全部楼层
思路2:不去考虑多年后某个时间还能打开的问题,别人不可能拿着同一个密码去试时间的

出0入0汤圆

发表于 2018-5-9 09:53:59 | 显示全部楼层
思路3:以出产日期计算小时数,来代替开始时间

出0入0汤圆

发表于 2018-5-9 09:56:09 | 显示全部楼层
将军令 动态口令牌 基本上都是这样的思路。

出0入0汤圆

发表于 2018-5-9 10:04:21 | 显示全部楼层
这个正好我刚做完,也是一小时一个密码,很容易的,先说理论,每天只有24个密码,一年也就是24*365,算10年87600,不知道你的密码类型有几种,就算10种,也才876000,6个数字密码有999999种组合,也够用了。
比如从2018年1月1日第一个小时对应密码000000,第二个小时对应000001,每小时加1 就行。
然后就比较简单了,找一个可逆算法,把这个原始密码加密成另外一个6位数字对外就行,比如左移多少,异或一下,右移多少,根据第一位数字交换第二位数字等,多折腾一会就看不出规律了。

出0入0汤圆

发表于 2018-5-9 10:14:29 | 显示全部楼层
19楼和24楼,47楼都已经解决了楼主的问题,就看看楼主会不会这这些人发红包

出10入0汤圆

发表于 2018-5-9 10:16:36 来自手机 | 显示全部楼层
本帖最后由 yoz 于 2018-5-9 10:18 编辑

建议模仿 Google Authenticator,它的实现方式更加开放而且安全,不建议自己想出一个办法生成。
可以参见 RFC6238 的文档。
https://tools.ietf.org/html/rfc6238

出0入0汤圆

发表于 2018-5-9 10:54:47 | 显示全部楼层
你这个方法与很多游戏的流动密码一样。比如网易的将军令,就是利用时间轴一样来同步密码。

出0入0汤圆

发表于 2018-5-9 11:20:46 | 显示全部楼层
时间戳+密钥,进行HASH运算,牢不可破

出0入0汤圆

发表于 2018-5-9 11:29:51 | 显示全部楼层
几年前万网络游戏  密保和这个类似吧

出0入169汤圆

发表于 2018-5-9 11:30:12 来自手机 | 显示全部楼层
本帖最后由 lxvtag 于 2018-5-9 11:35 编辑

为何密码需要可以逆推?不成了通信了?
51楼说的hash这类才是真正的加密。需要容错时间戳就不要精确到秒,服务端取前后若干个时间做hash,有一个匹配就通过,同时也能知道客户端大致的时间误差

出0入0汤圆

发表于 2018-5-9 11:46:59 | 显示全部楼层
这个是离线试密码锁的访客密码生成吧?根据主密码和时间,生成访客密码,访客密码有效时间就只有一个小时或者半个小时。

出0入0汤圆

发表于 2018-5-9 11:50:50 来自手机 | 显示全部楼层
时间变量32位可以用几十年了,如果放弃分秒又可以少十位左右,二十二位转六个字节什么hash md5什么的

出0入0汤圆

发表于 2018-5-9 11:54:09 来自手机 | 显示全部楼层
本帖最后由 brentcao 于 2018-5-9 11:57 编辑

具体参考千年虫问题

出0入0汤圆

发表于 2018-5-9 11:57:15 | 显示全部楼层
板凳学习学习。

出0入4汤圆

发表于 2018-5-9 13:16:55 | 显示全部楼层
现在好多网上获取手机验证码的xxx分钟有效,是不是也这样算出来的?

出255入0汤圆

发表于 2018-5-9 13:51:22 | 显示全部楼层
mfkqqw 发表于 2018-5-8 22:49
生成6位字符密码,还要通过 6位字符密码算回去的

你这个需求也相对简单,很容易做到。你可以把密码看成是用户名,你有了用户名,该用户名下面的权限是不是就知道了。你想在用户有什么权限你就可以设置什么权限。很简单

出255入0汤圆

发表于 2018-5-9 13:54:00 | 显示全部楼层
类似的需求之前做过,可以看59楼的回复。相对来说把问题想复杂了

出0入57汤圆

发表于 2018-5-9 14:22:42 | 显示全部楼层
以小时为单位,10年的小时数是10*366*24=87840 起始时间占掉5位
有效期限制在9小时以内,用第6位表示。
加密算法?算了,没地方了,反正只有四种,四种加密算法都算一遍,随便一种结果与输入的密码能对应起来就认为密码正确了。

这样就能表示出来了, 至于怎么加密楼主应该不需要也不希望公开,所以,只要6位能表示出来这些信息就可以了。

出0入0汤圆

发表于 2018-5-9 14:41:52 | 显示全部楼层
1.动态口令牌的原理简单分析
        该装置有一颗内置小芯片和一个可以显示多达6位阿拉伯数字的长方形LCD窗口,其体积很小,可以系在钥匙环上。动态口令牌使用唯一的128位种子将其初始化;其内部芯片每分钟都会使用一种算法,组合该种子与当前时间,生成一个随机的数字。而在认证服务器则采取和这个动态密码器同一种算法产生该随机数字,保证动态密码器和我行网银服务器的单一认证,就像每个客户都有了世界上独一无二的身份认证,保证客户使用网银的安全性。
        服务器端和每个对应的“动态口令牌”都使用同样的一套算法,可以自定义计算数组的时间间隔。每批次“动态口令牌”都拥有唯一的序列号,然后服务器端和“动态口令牌”执行相同的计算程序,在设定好的相同的更新时间计算出新的数组.
        其实上网输入密码服务器验证时跟这个动态口令牌没有有直接物理联系,唯一有联系就是二者根据唯一的序列号,利用公式,你算你的,我算我的。但同一时间算出的数字都是一样的,要不就会验证不能通过,这个6位阿拉伯数字的计算过程中时间是一个很重要的参数,使用时间参数时2者的时间必须要保持一致,要不就会时间不同步导致动态口令牌失效!
        对于失去时间同步的令牌,目前可以通过增大偏移量的技术(前后10分钟)来进行远程同步,确保其能够继续使用,降低对应用的影响,但对于超出默认(共20分钟)的时间同步令牌,将无法继续使用或进行远程同步,必须返厂或送回服务器端另行处理。

出0入0汤圆

发表于 2018-5-9 17:58:38 | 显示全部楼层
48比特:多少年内不重复,是否要保证只对一个锁有效,只对一个用户有效

出0入0汤圆

发表于 2018-5-9 18:47:56 | 显示全部楼层
要6个数字包含这么多的信息,还要保证这个密码的有效性,并且密码不能有连续性问题,有点难度呀
不知有没有高手做出来呢?

出0入0汤圆

发表于 2018-5-9 19:09:59 | 显示全部楼层
我也建议楼主用 哈希算法,sha1,sha256,或者国内的sm3 基本差不多,需要锁出厂的时候设置时间+ key,一个key对应一把锁,后台通过时间+key对比口令,国内银行的令牌都是这么搞得

出0入0汤圆

发表于 2018-5-9 20:11:56 | 显示全部楼层
本帖最后由 3DA502 于 2018-5-9 20:13 编辑
mfkqqw 发表于 2018-5-8 22:47
指向10个混淆函数的其中一个?不明白,能说详细点吗,
年可以省下一位,不错 ...


混淆函数
可以把表示时间的第一位和第三位数字交换,交换规则自己定  12345  =  35241
交换后的数字可以按照规则滚动,比如滚动+3 的操作---     1+3=4 2+3=5 9+3=2

这些都是可逆向的计算,每个混淆函数包含不同的规则组合,生成数字难以直接猜测


出0入0汤圆

发表于 2018-5-9 20:36:56 | 显示全部楼层
其实不需要反推的。如果要反推出这些参数(开始时间 +结束时间 +密码类型),6位密码远远不够的。只需要验证密码是不是有效密码就行了

出0入0汤圆

 楼主| 发表于 2018-5-9 21:09:52 | 显示全部楼层
3DA502 发表于 2018-5-8 22:42
一天24小时 24*365 =8760
时间起点是2018,作为0,2019为1,2028为9

结束时间需要算进去  这个密码可能会让使用一年,最多可以使用3年的   ,起始和结束间隔最少需要做到3年以上,精确到小时。

出0入0汤圆

 楼主| 发表于 2018-5-9 21:11:17 | 显示全部楼层
sharehej 发表于 2018-5-8 22:55
打个比方说,你密码需要5分钟更新一次

你利用时间戳产生一组明文,比如:

看不懂,不过结束时间需要算进去  这个密码可能会让使用一年,最多可以使用3年的   ,起始和结束间隔最少需要做到3年以上,精确到小时。

出0入0汤圆

 楼主| 发表于 2018-5-9 21:12:26 | 显示全部楼层
.titrwh 发表于 2018-5-9 10:04
这个正好我刚做完,也是一小时一个密码,很容易的,先说理论,每天只有24个密码,一年也就是24*365,算10年 ...

结束时间需要算进去  这个密码可能会让使用一年,最多可以使用3年的   ,起始和结束间隔最少需要做到3年以上,精确到小时。

出0入0汤圆

 楼主| 发表于 2018-5-9 21:13:18 | 显示全部楼层
liurangzhou 发表于 2018-5-9 10:14
19楼和24楼,47楼都已经解决了楼主的问题,就看看楼主会不会这这些人发红包 ...

我很希望给这个红包发出去,不过只有一份哟

出0入0汤圆

 楼主| 发表于 2018-5-9 21:23:55 | 显示全部楼层
unclewolf 发表于 2018-5-9 20:36
其实不需要反推的。如果要反推出这些参数(开始时间 +结束时间 +密码类型),6位密码远远不够的。只需要验 ...

这样,我给密码提到8位数字字符,因为我看到别人的锁上已经做出来了,是4到8位数字。

精确到小时,最长8位数字,时间间隔为3到10年(别人家做到20年)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-5-9 22:03:26 来自手机 | 显示全部楼层
八个数字就够了,还是前面说的,十年的开始时间有24:365:10,结束时间三年为24:365:3,这六个数字全乘起来就是所有组合的可能性,一共是95,922,000,在最多加上24小时,也就95,922,024,8个数字最多99999999,基本刚够用。剩下的就还是我上面说的各种加密就行。 手机码字,没有乘号,上面冒号代替。

出0入0汤圆

发表于 2018-5-9 22:12:23 来自手机 | 显示全部楼层
智能锁就有这个功能

出0入0汤圆

发表于 2018-5-9 22:25:22 | 显示全部楼层
本帖最后由 .titrwh 于 2018-5-9 22:37 编辑

上面好像说的有问题,最后那个也是要乘以24小时的,那就不够了,理论上做不到。
楼主截图别人做的选项只有一天一周一月这样的种类就少多了,完全可以做到,估计那个做不到楼主说的比如设置123天4小时这样

出0入0汤圆

发表于 2018-5-9 22:47:44 | 显示全部楼层
今年好多人做智能锁,有专利提供了离线密码的专利方案可以去看一下思路

出0入0汤圆

发表于 2018-5-10 00:16:30 | 显示全部楼层
我猜人家的使用时间是分时间类型的,这样可以压缩数据
如果选择小时为单位,只能设置0~24小时最多5位二进制数可以表示
如果选择天为单位,只能设置0~31天,这样只需要5bit表示
如果选择月为单位,只能设置0~12个月,这样只需要4bit表示
如果选择年为单位,只能选择0~10年,这样也只需要4bit表示
不能自由设置跨单位的时间跨度,比如说5个月03天5小时

就和万用表换量程一样,当选择大量程时牺牲精度

另外需要2bit当作时间模式,这样总共需要最多2+5=7比特
起始时间需要完整的分辨率,10*24*365=87600需要17比特
总共7+17=24比特=16777216
达到8位数字的要求

实际这个还可以做成变长数据格式,对于月模式7位数字也是可以做到的
比特位合并(2+5+17)的方式其实还浪费了一些空间,完全可以自己编码所有的可能,这样既进一步减少位数还可以有加密效果,锁里同步一个编码表即可逆向解算,这个表可以定时和服务器更新


出0入89汤圆

发表于 2018-5-10 06:21:49 来自手机 | 显示全部楼层
我认为我已经想到了这个方法了!理论上可以无穷年!过几天我再写个说明吧!

出0入0汤圆

发表于 2018-5-10 07:37:24 | 显示全部楼层
进来学习下,扩展一下知识,大家提供的方法感觉都不错……

出0入0汤圆

发表于 2018-5-10 08:04:05 | 显示全部楼层
你这个只要能牺牲一边的精度到天就好了,比如开始精确到小时,有效期为天。或者开始精确到天,有效期到小时,用我上面的方法就可以实现。
两个都精确到小时以我的智商暂时解决不了,等待圣手出现。

出0入0汤圆

发表于 2018-5-10 08:46:31 | 显示全部楼层
20年共 20*365*24=175200 小时
4种密码类型 175200*4=700800.
6数密码一一对应,数据量够了。应该有方法。

出0入0汤圆

发表于 2018-5-10 08:55:07 | 显示全部楼层
mfkqqw 发表于 2018-5-9 21:23
这样,我给密码提到8位数字字符,因为我看到别人的锁上已经做出来了,是4到8位数字。

精确到小时,最长8 ...

看到你72楼,大概明白了一点,你的意图是,生成一个固定密码,涉及了这个密码的启用时间、结束时间、密码类型,对么?
其中启用时间到结束时间的跨度,最大1年,最小1天,密码的使用时间要求精确到小时,对么?
如果是这样的话,一年365天,每天24小时,一年内时间以小时为单位,也不过365*24=8760,假设10年一个时间寿命周期,也不过87600.
有效期为1年、3个月、1个月、1周、1天,也就5种类型。再加上你密码类型,合计不过7种类型。
假设从2018年1月1日0时作为起始以00000表示,那么08759(我把年放在最前面)则表示2018年12月31日23时;18760(我把年放在最前面)则表示为2019年1月1日0时;……
再加上其他手段,实现起来应该不难。使用压缩的话6位应该能做到,要是你放宽到8位,就更容易了。
(此外,数字还可以打乱,使用查表还原,比如用户看到的数字1,在你程序里表格里实际表示5等等)
===============================
我原来给你的思路,是生成一个动态密码,密码跟随时间定期更新,超过更新周期,该密码则无效了。
和你的意图不一致。

出0入0汤圆

发表于 2018-5-10 08:58:55 | 显示全部楼层
本帖最后由 sharehej 于 2018-5-10 09:02 编辑



分享一本小人书《密码》
=================================以下内容补充
不亏是日本出品,封面就给你惊喜:那个穿短裙的长发小姑娘,两个膝盖通红,一侧还贴了创口贴,满脸通红;那个小帅哥,满头大汗,右手还拿着圣器!
嘿嘿!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-5-10 09:05:28 | 显示全部楼层


这个我就实话实说吧:封面上全他娘的日本小娘们,一个爷们都么有!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-5-10 09:27:10 | 显示全部楼层
RFC 4226 (HOTP) and the RFC 6238 (TOTP) 参考这两个 ,github上一堆实现算法

出0入0汤圆

发表于 2018-5-10 09:28:18 | 显示全部楼层
https://github.com/freeotp/freeotp-pebble
头像被屏蔽

出0入0汤圆

发表于 2018-5-10 11:17:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2018-5-10 11:19:57 | 显示全部楼层
我来提供一个思路。。。做同步加密,无非就是输入一个数据,然后判断这个数据是否合理。。。其实压根就不需要还原开始时间,只需要用这个6位密码表示结束时间就可以啦!!!举个例子:比如基础共有时间从2000开始,比如此时是2001年,使用3年,然后这个数字在2004年到期。。。如果用6为密码直接表示2004年就可以了。。。我计算了一下,6位数字可以使用100年,5位数字可以使用10年。。。精确1h。。。至于怎么用混淆,就是另外的思路了!!!!!

出0入0汤圆

发表于 2018-5-10 11:29:55 | 显示全部楼层
说错了,是表示使用时间。。。这样的话,视乎可以非常长的时间了!!!

出0入22汤圆

发表于 2018-5-10 11:32:10 | 显示全部楼层
OneRain 发表于 2018-5-10 11:19
我来提供一个思路。。。做同步加密,无非就是输入一个数据,然后判断这个数据是否合理。。。其实压根就不需 ...

如果你在2001年给了我一个密码,然后现在2018了,按理说密码早已经失效,此时我把你设备的时钟重新调整到2001,那么我这么密码是不是还能继续用?

出0入0汤圆

发表于 2018-5-10 11:36:17 | 显示全部楼层
jiaowoxiaolu 发表于 2018-5-10 11:32
如果你在2001年给了我一个密码,然后现在2018了,按理说密码早已经失效,此时我把你设备的时钟重新调整到 ...

基于时间的,如果时间不准确,所有密码都会失效!!!这个无解!!!

出0入8汤圆

发表于 2018-5-10 11:44:13 来自手机 | 显示全部楼层
把历史时间做均方根运算

出0入8汤圆

发表于 2018-5-10 11:45:56 来自手机 | 显示全部楼层
把历史时间做均方根运算不同的锁对应不同的采样速度就行了

出0入0汤圆

发表于 2018-5-10 18:20:30 | 显示全部楼层
mfkqqw 发表于 2018-5-9 21:23
这样,我给密码提到8位数字字符,因为我看到别人的锁上已经做出来了,是4到8位数字。

精确到小时,最长8 ...

看了图片,有几个问题:

1、这个锁能否连网。 如果可以,是不是所有的时间参数都已经通过网络下载到锁了里,图上的8个数字只是一个随意生成的号呢,只要把这个号输入锁里,一对比就什么信息都有了。
2、如果锁是不能连网的,也就是说这8个数字里包括了起始时间、结束时间、密码类型等参数。
3、那问题又来了,同一种类型的锁输入同一个密码是不是也能开门呢?如果不能,那8个数字是不是还要包含每一把锁固有的物证点呢?

出0入0汤圆

发表于 2018-5-11 13:43:40 | 显示全部楼层
1874 发表于 2018-5-10 18:20
看了图片,有几个问题:

1、这个锁能否连网。 如果可以,是不是所有的时间参数都已经通过网络下载到锁了 ...

第三个问题通过不同的加密算法或者不同秘钥区分就行,原始数据对每个锁的同一时间是一样的,楼主没消息了,是解决问题了吗?没见红包

出0入147汤圆

发表于 2018-5-11 22:49:48 来自手机 | 显示全部楼层
楼上很多都说到点子上了,楼主自己把问题复杂化了,我们实现的算法是生成6到8位口令,口令通过动态秘钥进行异或加密,服务端验证的时候能识别出错误或者时间不匹配的口令,从而提醒用户重新进行时间同步

出0入0汤圆

 楼主| 发表于 2018-5-12 16:48:34 | 显示全部楼层
.titrwh 发表于 2018-5-11 13:43
第三个问题通过不同的加密算法或者不同秘钥区分就行,原始数据对每个锁的同一时间是一样的,楼主没消息了 ...

在的,现在我了解的都是算不回,生成是可以的,我们之前一直生成是9位,5年内

我现在就是要一个能生成6到8位的密码,时间间隔是5年或更高,最小单位是小时      比如:密码是 458698  这6个数字,能回算出开始是那一个年月日时,结束是那一年月日时,类型是几。。


你们现在都是在讨论如何生成密码,我还需要算回去。

出0入0汤圆

 楼主| 发表于 2018-5-12 16:50:45 | 显示全部楼层
dreampet 发表于 2018-5-11 22:49
楼上很多都说到点子上了,楼主自己把问题复杂化了,我们实现的算法是生成6到8位口令,口令通过动态秘钥进行 ...

与服务没有关系 ,怎么生成都没问题,你要给我用6位数字密码算回去,看楼主位

出0入0汤圆

 楼主| 发表于 2018-5-12 17:07:38 | 显示全部楼层
谁能用实例算出来   以2015年1月1号1时做基数  我现在发一个6位密码:   这个密码只能在 2018年7月12日16时 到 2025年1白1日1时这段时间内使用,类型为1      其它时间和类型之外不能用  
算出这个6位密码,然后再用算法回算出开始时间和结束时间,类型为1

比如按时间要求生成的密码是  785426       然后  785426 输入到锁里就可以知道时间  在 2018年7月12日16时 到 2025年1白1日1时这段时间内使用,类型为1

你们发现没有,其实任何时间有很多密码是可以开锁的,因为开始时间和结束时间可以任意设置,还有不同型的类型。



出0入0汤圆

 楼主| 发表于 2018-5-12 17:09:01 | 显示全部楼层
mkliop 发表于 2018-5-10 11:45
把历史时间做均方根运算不同的锁对应不同的采样速度就行了

看不懂 能举例吗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 21:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表