Board logo

标题: [数值计算] 关于批处理利用时间产生动态密码,密码每次更新15个,密码可事先计算出来(原创) [打印本页]

作者: szl1123    时间: 2014-6-26 19:43     标题: 关于批处理利用时间产生动态密码,密码每次更新15个,密码可事先计算出来(原创)

昨天晚上在论坛看到
http://bathome.net/viewthread.php?tid=15628&extra=&page=1
里面论坛动态密码的帖子
于是产生了自己的想法,利用时间的变化来产生随机密码。
原理:
利用随时变化的时间加入到一个固定的公式(这个公式大家可以随意设定)里面,计算出一个值。
当然这个密码值是可以事先算出来的,如果要在两台电脑上使用,比如你要给一个不知道的人提供密码,首先你们两台电脑的时间必需一致,因为这个批处理是利用时间的变化来计算值的,如果时间不同得到的密码也是不相同的,在唯一的时间内只有一个密码。密码30秒更新一次,从00秒开始到29秒更新一次,再从29秒到59更新一次。
代码比较简单容易理解,代码如有不拖请指出。

以下内容无关紧要,看不看无所谓
差不多用了六七个小时的时候完成的
ping -n %ddsj% -w 500 10.29.253.221>nul
关键是到这里的时候出现了一点小问题,在XP上运行时间可以从秒的00秒和30秒开始运行,但是在win8.1上运行时秒上的时间问题会从9秒和39秒开始,不知为何。
最后换成了choice /t %ddsj% /d y /n>nul才搞定的
  1. @echo off
  2. rem 本代码是@szl1123原创
  3. rem 2014年6月26日@YuZhou
  4. title 随机密码 by szl123
  5. mode con: cols=55 lines=11
  6. color 0A
  7. if "%~n0f"=="byszl1123f" goto xsmm
  8. :start
  9. cls
  10. set mim=
  11. echo.
  12. echo.
  13. echo.
  14. set /p mim=请输入密码:
  15. if "/%mim%/"=="//" goto start
  16. goto sjjs
  17. :sjjs
  18. cls
  19. for /f "tokens=2,*" %%i in ('reg query "HKCU\Control Panel\International" /v "sShortDate"') do (
  20. set ysdate=%%j
  21. )
  22. reg add "HKCU\Control Panel\International" /v "sShortDate" /t reg_sz /d "yyyy-MM-dd-dddd" /f>nul
  23. set nian=%date:~0,4%
  24. set yue=%date:~5,2%
  25. if %yue:~0,1%==0 set yue=%yue:~1,1%
  26. set ri=%date:~8,2%
  27. if %ri:~0,1%==0 set ri=%ri:~1,1%
  28. reg add "HKCU\Control Panel\International" /v "sShortDate" /t reg_sz /d "%ysdate%" /f>nul
  29. set sdtime=%time%
  30. set shi=%sdtime:~0,2%
  31. if %shi:~0,1%==0 set shi=%shi:~1,1%>>0.txt
  32. if "%shi%"=="0" set shi=%ri%*%yue%>>0.txt
  33. set fen=%sdtime:~3,2%
  34. if %fen:~0,1%==0 set fen=%fen:~1,1%
  35. if "%fen%"=="0" set fen=%ri%*%yue%+%ri%
  36. set miao=%sdtime:~6,2%
  37. if %miao:~0,1%==0 set miao=%miao:~1,1%
  38. if %miao% leq 29 set /a ddsj=29-%miao%+1
  39. if %miao% geq 30 set /a ddsj=59-%miao%+1
  40. set /a bmiao=(%fen%+21)*(%shi%+6)+(%fen%+4)*%yue%
  41. if %miao% geq 30 set /a bmiao=(%nian%-%fen%*%ri%)*%fen%
  42. set /a mima=%nian%*(%shi%+%bmiao%)*(%fen%+%bmiao%)*%ri%+(%bmiao%+%shi%+%yue%)*%fen%
  43. set /a mima1=%nian%*(%shi%+%bmiao%)*%fen%*%fen%*%ri%+(%bmiao%+%shi%+%yue%)*%fen%*%fen%*%bmiao%
  44. set /a mima2=%nian%*(%shi%+%bmiao%)*(%fen%+%bmiao%*%ri%)+(%bmiao%*%shi%+%yue%)*%fen%
  45. set /a mima3=%nian%*(%shi%+%bmiao%)*(%fen%+%bmiao%)*%ri%*(%bmiao%+%shi%+%yue%)+%fen%
  46. set /a mima4=%fen%*%bmiao%*(%shi%+%nian%)+(%fen%+%fen%*%bmiao%)*%ri%+(%bmiao%*%shi%*%yue%)*%fen%
  47. set /a mima5=%fen%*(%shi%+%bmiao%)*(%nian%*%bmiao%)*%ri%+(%bmiao%*%shi%+%yue%)*%fen%
  48. set /a mima6=%fen%*(%shi%+%bmiao%)*(%fen%+%ri%)*%bmiao%+(%bmiao%+%shi%+%yue%)*%nian%
  49. set /a mima7=%nian%*(%shi%+%bmiao%)*(%ri%+%bmiao%)*%fen%+(%bmiao%+%shi%+%yue%)*%fen%
  50. set /a mima8=%nian%*(%shi%+%bmiao%)*(%fen%+%bmiao%)*%ri%*%fen%+(%bmiao%+%shi%+%yue%)*%fen%
  51. set /a mima9=%nian%*(%shi%+%bmiao%)*%fen%*(%fen%+%bmiao%)*%ri%+(%bmiao%+%shi%+%yue%)*%fen%*%fen%
  52. set /a mima10=%fen%*%fen%%nian%*(%shi%+%bmiao%)*(%fen%+%fen%)*%ri%+%ri%*(%bmiao%+%fen%+%shi%+%yue%)*%fen%
  53. set /a mima11=%nian%*(%fen%+%bmiao%)*(%fen%+%bmiao%)*%fen%+(%bmiao%+%shi%+%yue%)*%fen%
  54. set /a mima12=%nian%*(%shi%+%fen%)*(%fen%*%bmiao%)*%fen%+(%bmiao%+%shi%*%yue%)*%fen%
  55. set /a mima13=%nian%*(%shi%+%bmiao%)*(%fen%*%ri%+%bmiao%)*(%ri%+%fen%)+(%bmiao%*%shi%+%fen%)*%fen%
  56. set /a mima14=%nian%*(%shi%+%bmiao%)*%ri%*(%fen%+%bmiao%)*%fen%*%fen%+(%bmiao%+%shi%+%yue%)*%fen%*%fen%
  57. set yzmm=0
  58. if "%mim%"=="%mima:~-8%" set yzmm=1
  59. if "%mim%"=="%mima1:~-8%" set yzmm=1
  60. if "%mim%"=="%mima2:~-8%" set yzmm=1
  61. if "%mim%"=="%mima3:~-8%" set yzmm=1
  62. if "%mim%"=="%mima4:~-8%" set yzmm=1
  63. if "%mim%"=="%mima5:~-8%" set yzmm=1
  64. if "%mim%"=="%mima6:~-8%" set yzmm=1
  65. if "%mim%"=="%mima7:~-8%" set yzmm=1
  66. if "%mim%"=="%mima8:~-8%" set yzmm=1
  67. if "%mim%"=="%mima9:~-8%" set yzmm=1
  68. if "%mim%"=="%mima10:~-8%" set yzmm=1
  69. if "%mim%"=="%mima11:~-8%" set yzmm=1
  70. if "%mim%"=="%mima12:~-8%" set yzmm=1
  71. if "%mim%"=="%mima13:~-8%" set yzmm=1
  72. if "%mim%"=="%mima14:~-8%" set yzmm=1
  73. if "%yzmm%"=="1" goto ok
  74. goto error
  75. :xsmm
  76. cls
  77. for /f "tokens=2,*" %%i in ('reg query "HKCU\Control Panel\International" /v "sShortDate"') do (
  78. set ysdate=%%j
  79. )
  80. reg add "HKCU\Control Panel\International" /v "sShortDate" /t reg_sz /d "yyyy-MM-dd-dddd" /f>nul
  81. set nian=%date:~0,4%
  82. set yue=%date:~5,2%
  83. if %yue:~0,1%==0 set yue=%yue:~1,1%
  84. set ri=%date:~8,2%
  85. if %ri:~0,1%==0 set ri=%ri:~1,1%
  86. reg add "HKCU\Control Panel\International" /v "sShortDate" /t reg_sz /d "%ysdate%" /f>nul
  87. set sdtime=%time%
  88. set shi=%sdtime:~0,2%
  89. if %shi:~0,1%==0 set shi=%shi:~1,1%>>0.txt
  90. if "%shi%"=="0" set shi=%ri%*%yue%>>0.txt
  91. set fen=%sdtime:~3,2%
  92. if %fen:~0,1%==0 set fen=%fen:~1,1%
  93. if "%fen%"=="0" set fen=%ri%*%yue%+%ri%
  94. set miao=%sdtime:~6,2%
  95. if %miao:~0,1%==0 set miao=%miao:~1,1%
  96. if %miao% leq 29 set /a ddsj=29-%miao%+1
  97. if %miao% geq 30 set /a ddsj=59-%miao%+1
  98. set /a bmiao=(%fen%+21)*(%shi%+6)+(%fen%+4)*%yue%
  99. if %miao% geq 30 set /a bmiao=(%nian%-%fen%*%ri%)*%fen%
  100. set /a mima=%nian%*(%shi%+%bmiao%)*(%fen%+%bmiao%)*%ri%+(%bmiao%+%shi%+%yue%)*%fen%
  101. set /a mima1=%nian%*(%shi%+%bmiao%)*%fen%*%fen%*%ri%+(%bmiao%+%shi%+%yue%)*%fen%*%fen%*%bmiao%
  102. set /a mima2=%nian%*(%shi%+%bmiao%)*(%fen%+%bmiao%*%ri%)+(%bmiao%*%shi%+%yue%)*%fen%
  103. set /a mima3=%nian%*(%shi%+%bmiao%)*(%fen%+%bmiao%)*%ri%*(%bmiao%+%shi%+%yue%)+%fen%
  104. set /a mima4=%fen%*%bmiao%*(%shi%+%nian%)+(%fen%+%fen%*%bmiao%)*%ri%+(%bmiao%*%shi%*%yue%)*%fen%
  105. set /a mima5=%fen%*(%shi%+%bmiao%)*(%nian%*%bmiao%)*%ri%+(%bmiao%*%shi%+%yue%)*%fen%
  106. set /a mima6=%fen%*(%shi%+%bmiao%)*(%fen%+%ri%)*%bmiao%+(%bmiao%+%shi%+%yue%)*%nian%
  107. set /a mima7=%nian%*(%shi%+%bmiao%)*(%ri%+%bmiao%)*%fen%+(%bmiao%+%shi%+%yue%)*%fen%
  108. set /a mima8=%nian%*(%shi%+%bmiao%)*(%fen%+%bmiao%)*%ri%*%fen%+(%bmiao%+%shi%+%yue%)*%fen%
  109. set /a mima9=%nian%*(%shi%+%bmiao%)*%fen%*(%fen%+%bmiao%)*%ri%+(%bmiao%+%shi%+%yue%)*%fen%*%fen%
  110. set /a mima10=%fen%*%fen%%nian%*(%shi%+%bmiao%)*(%fen%+%fen%)*%ri%+%ri%*(%bmiao%+%fen%+%shi%+%yue%)*%fen%
  111. set /a mima11=%nian%*(%fen%+%bmiao%)*(%fen%+%bmiao%)*%fen%+(%bmiao%+%shi%+%yue%)*%fen%
  112. set /a mima12=%nian%*(%shi%+%fen%)*(%fen%*%bmiao%)*%fen%+(%bmiao%+%shi%*%yue%)*%fen%
  113. set /a mima13=%nian%*(%shi%+%bmiao%)*(%fen%*%ri%+%bmiao%)*(%ri%+%fen%)+(%bmiao%*%shi%+%fen%)*%fen%
  114. set /a mima14=%nian%*(%shi%+%bmiao%)*%ri%*(%fen%+%bmiao%)*%fen%*%fen%+(%bmiao%+%shi%+%yue%)*%fen%*%fen%
  115. echo.
  116. echo.
  117. echo.      密码%ddsj%秒后自动更新,每次更新15个。
  118. echo.
  119. echo.      如果不使用请直接关闭程序。
  120. echo.
  121. echo       密码是:%mima:~-8%  ^|  %mima1:~-8%  ^|  %mima2:~-8%
  122. echo               %mima3:~-8%  ^|  %mima4:~-8%  ^|  %mima5:~-8%
  123. echo               %mima6:~-8%  ^|  %mima7:~-8%  ^|  %mima8:~-8%
  124. echo               %mima9:~-8%  ^|  %mima10:~-8%  ^|  %mima11:~-8%
  125. echo               %mima12:~-8%  ^|  %mima13:~-8%  ^|  %mima14:~-8%
  126. choice /t %ddsj% /d y /n>nul
  127. goto xsmm
  128. :ok
  129. cls
  130. echo.
  131. echo.
  132. echo.     恭喜您输入的密码:“%mim%”正确
  133. echo.
  134. echo.
  135. msg * /time:4 /w "恭喜您输入的密码:“%mim%”正确"
  136. pause
  137. goto start
  138. :error
  139. echo.
  140. echo.
  141. echo.     不好意思您输入的密码:“%mim%”错误
  142. echo.
  143. echo.
  144. msg * /time:4 /w "不好意思您输入的密码:“%mim%”错误"
  145. goto start
复制代码
源文件下载。
作者: CrLf    时间: 2014-6-26 22:47

提个小建议,可能可以借鉴支付宝的动态密码那样,每三十秒一周期依次产生若干密码,比如三十个,寿命为一个周期,这三十个密码在各自的周期内都是正确的
这样用户每次都有整整三十秒的时间来输入密码,手残党就不需要因为到了 27 秒来不及打字而等待下一个周期,所依赖的时间同步精度也低了许多
作者: szl1123    时间: 2014-6-26 23:13

回复 2# CrLf


    那就是在就算的时候多设定几个值,明天试一下。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2