发新帖我要提问
12
返回列表
打印
[技术讨论]

验证码 验证原理分析请教!!!

[复制链接]
楼主: 1949zbh
手机看帖
扫描二维码
随时随地手机跟帖
21
877049204| | 2018-10-13 20:34 | 只看该作者 回帖奖励 |倒序浏览
我觉得和银行给的密钥很像,密钥里面存一组数,银行自己有一组对应的
以时间或者使用次数作为两者之间的参照

使用特权

评论回复
评论
1949zbh 2018-10-15 08:45 回复TA
应该是类似的原理! 
22
zzz3265| | 2018-10-14 13:40 | 只看该作者
序列号包含充值信息, 以及自身效验数据, 简单举个例子
ABCDEF01XX

可以把01作为充值数据, A-F可以随机, 然后XX作为整体的效验值(比如CRC8), 最后可以把所有数据加密

使用特权

评论回复
23
mohanwei| | 2018-10-14 21:05 | 只看该作者
原理很简单:
1-服务器和设备都各设置一个变量:count,初始化为0
2-服务器和设备都使用共同的算法,根据这个二维码产生一个哈希序列数组,如no[]={111,222,333,444,555,666,777,……}
   这个数组不必初始化为实体,可以用函数gen(count)来产生

使用时:
1-用户用APP扫码,付款,服务器收到钱后,把该二维码对应的count变量加1,然后调用gen(count)产生序列值xxx,发送到APP界面
2-用户在APP界面看到这个序列值xxx,通过设备按键输入设备
3-设备调用gen(count)产生序列值yyy,然后用yyy跟xxx对比,如果相等,则认为合法,让继电器闭合1小时,并且count++;
  异常情况下,例如用户输入错误数据、或者前面有用户付款后缺不输入到设备(有钱任性),导致设备调用gen(count)产生序列值对比失败,此时设备可以连续尝试若干次count++后再调用gen(count),如比对正确则重新校正count;如比对还是失败,则可认为是用户输入错误,忽略即可。

使用特权

评论回复
24
mohanwei| | 2018-10-14 21:11 | 只看该作者
还有一种算法更简单,使用对称加密算法:
1-二维码作为基数,每次付款后,服务器在该二维码明文尾部加上当前时间、随机数等等(这样可以保证每次付款都得到不同数字),用公钥加密,然后把密文发给APP显示
2-用户把密文输入设备,设备使用公钥解密,然后比对开头的二维码,如果正确则工作一小时,不正确则忽略

使用特权

评论回复
25
linqing171| | 2018-10-14 22:03 | 只看该作者
正统的做法:
二维码里面有随机数 ,也就是  challenge ;
用手机扫描后,发服务器,服务器根据密钥计算此chanllenge的hash值。
你手工输入到mcu里面,mcu里面根据同样的密钥,同样的算法,计算此channlenge的hash值。

你上传的图片:
http://www.yubaohe.cn/ord/ord?gprsNo=10000103

从网址上来看:
1 不是随机数,是流水号。
2 没有本机的序列号。
3 哈哈哈哈

如果只是一个继电器的功能,你可以做个电路外挂,具体不便交流。懂电路的人来说,电路外挂远比软件外挂容易多了。




使用特权

评论回复
评论
1949zbh 2018-10-15 10:59 回复TA
学习了!!!!!在此谢过 
26
eydj2008| | 2018-10-15 08:11 | 只看该作者
二维码 里面的数据, 可以算出 验证码的, 就比较容易,
或是说你输入一次二维码变化一次, 对应一个验证码 都是可行的.

使用特权

评论回复
27
1949zbh|  楼主 | 2018-10-15 08:44 | 只看该作者
mohanwei 发表于 2018-10-14 21:05
原理很简单:
1-服务器和设备都各设置一个变量:count,初始化为0
2-服务器和设备都使用共同的算法,根据这 ...

谢谢!!!

使用特权

评论回复
28
1949zbh|  楼主 | 2018-10-15 08:45 | 只看该作者
linqing171 发表于 2018-10-14 22:03
正统的做法:
二维码里面有随机数 ,也就是  challenge ;
用手机扫描后,发服务器,服务器根据密钥计算此c ...

谢谢指教!

使用特权

评论回复
29
1949zbh|  楼主 | 2018-10-15 08:46 | 只看该作者
IC烧录机 发表于 2018-10-13 17:10
这是一个简易充电桩对吗?

是的

使用特权

评论回复
30
renxiaolin| | 2018-10-15 09:08 | 只看该作者
你的想法很善良呀,哈哈哈哈哈哈哈哈哈

使用特权

评论回复
31
icecut| | 2018-10-15 09:42 | 只看该作者
就是个动态码生成器.不用联网.

使用特权

评论回复
评论
icecut 2018-10-15 11:32 回复TA
@1949zbh :4bit序列号+2byte校验值. 参考身份证,就是方法之一 
1949zbh 2018-10-15 11:09 回复TA
能否说说思路或举个例子共论坛学习!!!谢谢 
32
mohanwei| | 2018-10-15 09:57 | 只看该作者

你发的那个二维码是设备显示屏显示出来的,还是像共享单车那样打印好贴在上面的?

使用特权

评论回复
评论
1949zbh 2018-10-15 11:08 回复TA
贴在上边的! 
33
nuaabob| | 2018-10-15 10:08 | 只看该作者
干嘛一定要联网,只要离线和在线验证码计算一致,当然可以不用联网了。

使用特权

评论回复
34
1949zbh|  楼主 | 2018-10-15 10:58 | 只看该作者
mohanwei 发表于 2018-10-14 21:11
还有一种算法更简单,使用对称加密算法:
1-二维码作为基数,每次付款后,服务器在该二维码明文尾部加上当 ...

膜拜

使用特权

评论回复
35
1949zbh|  楼主 | 2018-10-15 11:06 | 只看该作者
renxiaolin 发表于 2018-10-15 09:08
你的想法很善良呀,哈哈哈哈哈哈哈哈哈

使用特权

评论回复
36
renxiaolin| | 2018-10-16 08:56 | 只看该作者
linqing171 发表于 2018-10-14 22:03
正统的做法:
二维码里面有随机数 ,也就是  challenge ;
用手机扫描后,发服务器,服务器根据密钥计算此c ...

你说的是有问题的,因为每次扫描后会得到不一样的校验码,按你的说法,每次算出的hash是一样的

使用特权

评论回复
37
linqing171| | 2018-10-16 12:40 | 只看该作者
renxiaolin 发表于 2018-10-16 08:56
你说的是有问题的,因为每次扫描后会得到不一样的校验码,按你的说法,每次算出的hash是一样的 ...

http://www.yubaohe.cn/ord/ord?gprsNo=10000103

这次是10000103,下次是 10000104,和内部密钥运算后再算hash,这两个数不同,算出来的hash怎么可能是相同的?

使用特权

评论回复
38
blc220| | 2018-10-16 17:37 | 只看该作者
本帖最后由 blc220 于 2018-10-16 17:49 编辑

赞同  mohanwei  的方法,简单可行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则