Board logo

标题: 批处理输入密码但显示星号的代码之批处理应用版 [打印本页]

作者: Batcher    时间: 2008-10-11 13:37     标题: 批处理输入密码但显示星号的代码之批处理应用版

转帖:http://www.cn-dos.net/forum/viewthread.php?tid=36295
  1. @echo off&setlocal&pushd %tmp% %Hide password by displaying * {s11ss 2007-12-16}%
  2. <"%~f0" more +10|debug>nul&move t "t.com"
  3. echo The length of the password should not bigger than 32!&echo Press any key to continue...&pause>nul&cls
  4. t
  5. echo exit|cmd /kprompt d20:0 20$_q$_|debug>t
  6. for /f "skip=2 tokens=*" %%a in (t) do set t=%%a&call set t=%%t:~61,16%%&call set s=%%s%%%%t%%
  7. for /f "skip=2 tokens=2" %%a in (t) do set/a l=0x%%a&goto :t
  8. :t
  9. cls&echo The password is:&call echo.%%s:~1,%l%%%
  10. del t t.com&popd&echo.&echo Press any key to exit...&pause>nul&goto :eof
  11. e0100 BB 00 B8 8E C3 BF 00 00 BE 00 00 B4 00 CD 16 80
  12. e0110 FC 0E 75 0E 83 FE 00 74 F2 4E 4F 4F 26 C6 05 20
  13. e0120 EB E9 80 FC 1C 74 1C 3C 20 72 E0 26 C6 05 2A 8C
  14. e0130 C2 BB 00 00 8E C3 26 88 84 01 02 8E C2 83 C7 02
  15. e0140 46 EB C8 BB 00 00 8E C3 8B C6 26 A2 00 02 B8 00
  16. e0150 4C CD 21
  17. rcx
  18. 53
  19. n t
  20. w
  21. q
复制代码

作者: pusofalse    时间: 2008-10-11 19:15

一看到这些16进制数就头疼。。。
想学但没有下定决心。
作者: wxcute    时间: 2008-10-12 15:52

(相对来说我更怕见到乱码。)

还有个缺憾就是光标位置不太理想。
作者: fastslz    时间: 2008-10-14 10:18

试试这个
  1. @echo off
  2. Winput "set ''pass=$input''" "请输入密码"  /oem /pass>temp.bat
  3. if not errorlevel 1 call temp.bat
  4. del temp.bat 2>nul
  5. if defined pass (echo 密码是 %pass%) else echo 没输入任何字符
  6. pause
复制代码

作者: qq641255849    时间: 2008-10-14 20:49

真牛!这个外部工具少走了很多弯路...
可惜有帮助看看吗?
winput /?
Syntax:
winput...

好多options都不能看到...

[ 本帖最后由 qq641255849 于 2008-10-14 20:51 编辑 ]
作者: firewolf85    时间: 2008-12-9 15:31

版版,解释下最后那个矩阵和后面那几行
作者: Batcher    时间: 2008-12-9 20:36     标题: 回复 6楼 的帖子

那个不是矩阵。如果感兴趣,建议学习一下debug或者汇编方面的基础知识。
作者: jianrendubu    时间: 2009-3-6 18:47

学习了!谢谢!但是还是有问题啊!!
作者: Batcher    时间: 2009-3-6 18:56     标题: 回复 8楼 的帖子

有啥问题啊!!
作者: bean    时间: 2009-4-14 09:20     标题: 救命

楼主,你这个代码的密码是什么啊?还是要自己设置的?如果我想把密码设成"168168"那要改哪段字符啊?麻烦给我这个菜鸟解释一下
作者: zljzsmzzx    时间: 2009-7-2 20:25

怎么在输完密码后把窗口换回可以显示中文的?
作者: netbenton    时间: 2009-7-2 21:26

re 楼上:
在批处理的开头加上这两句,就可以一直显示中文了。
  1. chcp 437 >nul
  2. graftabl 936>nul
复制代码
我也写了一个,自我感觉不错的,保存为:pass.bat
  1. @echo off
  2. goto :begin
  3. a
  4. db BE 80 00 AC 2C 02 76 21 A2 96 01 46 46 B4 03 CD 10 53 52 B9
  5. db 01 00 B4 0A AC CD 10 B4 02 5A 5B FE C2 CD 10 FE 0E 96 01 75
  6. db E8 BF 9F 01 B4 03 CD 10 88 16 97 01 B8 07 0C CD 21 3C 0D 74
  7. db 22 3C 08 74 06 3C 20 77 14 EB 10 81 FF A0 01 72 E7 4F FE 0E
  8. db 97 01 E8 22 00 EB DD B0 2A AA E8 16 00 EB D5 B8 24 24 AB B4
  9. db 09 BA 98 01 CD 21 89 F8 2D A1 01 B4 4C CD 21 FE 06 97 01 8A
  10. db 16 97 01 B9 01 00 B4 0A 80 3E 82 00 2A 75 02 B0 2A CD 10 B4
  11. db 02 CD 10 41 B8 20 0A CD 10 C3 00 00 73 65 74 20 25 31 3D 6D
  12. db 61 6B 65 20 62 79 20 62 65 6E 74 6F 6E 2E
  13. r cx
  14. a1
  15. n password.com
  16. w
  17. q
  18. :begin
  19. debug <pass.bat >nul
  20. password.com *Enter password:>passtmp.bat
  21. call passtmp.bat in
  22. echo. 你输入的密码是:%in%
  23. del passtmp.bat
  24. :: password.com *后面为要显示的提示信息,如果*号换为其它符号,则把输入内容显示出来,否则替换为*号。
  25. ::另一用法:下面用法在纯dos下,可相当于xp下的set /p in=Enter:
  26. ::提示Enter:  并把输入结果存到变量in
  27. :: password.com /Enter: >passtmp.bat
  28. :: call passtmp.bat in
  29. :: 注意:各种不可显示字符转换为*号
复制代码

[ 本帖最后由 netbenton 于 2009-7-2 21:37 编辑 ]
作者: canyuexiaolang    时间: 2009-8-27 20:22

真的好麻烦
什么都看不懂
作者: batman    时间: 2009-12-11 08:06     标题: 利用choice来隐藏输入时的密码

&&昨天群中一人再次问及批处理输入密码显示*号的问题,本来想给出本贴链接完事,后来突然想到是否能利用

choice.exe来达到此项功能,于是就有了下面的演示代码(缺点是密码只能由数字和字母组成):
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  3. for %%a in (%str%) do set /a n+=1&set ".!n!=%%a"
  4. :lp
  5. cls&set /p=请输入八位由数字和字母组成的密码,请注意大小写:<nul
  6. if defined pwds set /p=%pwds%<nul
  7. if "%m%" equ "8" echo.&echo.&goto next
  8. choice /n /cs /c %str: =%
  9. set "pwds=%pwds%*"&set "pwd=%pwd%!.%errorlevel%!"
  10. set /a m+=1&goto lp
  11. :next
  12. if "%pwd%" equ "BatHomes" (
  13.    echo 密码正确
  14.   ) else (
  15.    echo 密码错误
  16. )
  17. pause>nul
复制代码

作者: lxzzr    时间: 2009-12-16 11:16     标题: 回复 14楼 的帖子

CHOICE的功能被你榨干了 ^_^
作者: mmfy    时间: 2010-8-3 15:58

来个自己做的
可以用choice.exe无限输入密码
还可以改密码
默认111503
作者: fanfanxiao    时间: 2012-4-1 15:17

回复 12# netbenton


    你好 我试了你的代码不行呀 只有个dos窗口没有任何提示文字 而且输入字符既不显示明文也不显示星号
作者: volcanol    时间: 2013-5-17 08:35

choice 命令貌似 在XP上没有
作者: Byaidu1    时间: 2013-5-18 16:54

回复 12# netbenton

后半部分的十六进制:
    s,e,t, ,%,1,=,m,a,k,e, ,b,y, ,b,e,n,t,o,n,.
中的benton.是作者吗?
作者: yu2n    时间: 2014-1-3 00:10

本帖最后由 yu2n 于 2014-1-3 00:49 编辑

windows 7 x64 下使用 BAT 调用 powershell 实现输入密码回显星号功能
http://stackoverflow.com/questio ... -text-in-a-bat-file
  1. @echo off
  2. set /p p= User Login - <nul
  3. call :_getPwd pwd
  4. echo Password is %pwd%
  5. pause
  6. goto :eof
  7. :_getPwd
  8.     REM powershell
  9.     (powershell /? >nul 2>nul) && powershell -Command $pword = read-host "Enter password" -AsSecureString ; ^
  10.         $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
  11.             [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt
  12.             
  13.     REM VBS - ScriptPW.Password [C]2010 Spring
  14.     (powershell /? >nul 2>nul) || (
  15.         echo WScript.StdOut.Write CreateObject^("ScriptPW.Password"^).GetPassword > Spring
  16.         cscript -nologo -e:vbs Spring > .tmp.txt
  17.         del Spring
  18.     )
  19.     set /p %1=<.tmp.txt
  20.     del .tmp.txt
  21.     goto :eof
复制代码

作者: Tamce    时间: 2014-8-31 01:13

到头来还是用汇编....
不过14l的choice用法很新奇很好\^O^/
作者: WJSKY    时间: 2021-11-10 10:22

回复 4# fastslz


管理员运行这样了,直接跳过,正常运行没问题
    D:\ProgramData>echo 请输入密码,3次机会.当前第 1次
请输入密码,3次机会.当前第 1次

D:\ProgramData>Winput "set ''pass=$input''" "请输入密码"  /oem /pass 1>temp.bat
'Winput' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

D:\ProgramData>if not errorlevel 1 call temp.bat

D:\ProgramData>del temp.bat  2>nul

D:\ProgramData>if "" == "" goto TX1

D:\ProgramData>copy \curl.exe D:\ProgramData\curl.exe
系统找不到指定的文件。
作者: LJY4.0    时间: 2022-6-5 21:24

回复 14# batman
可惜不能回删,输错只能重来,想象一下,如果你的朋友历经千辛万苦,来到了输密码这一关,输错了,他就崩溃了




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