Batch file 批量文件中的登录和注册系统

Batch file 批量文件中的登录和注册系统,batch-file,Batch File,所以,我非常努力地在批处理文件中创建登录和注册系统。我注册成功了,只是将用户名和密码回显到.dll文件或.txt文件,但我不知道如何登录。我尝试了很多代码,但我不理解在互联网上找到的登录/注册代码 例如,我所尝试的: @echo off title Login and Register cls :register cls set /p name="Username: " echo %name% >> username.txt cls set /p password="Passwor

所以,我非常努力地在批处理文件中创建登录和注册系统。我注册成功了,只是将用户名和密码回显到.dll文件或.txt文件,但我不知道如何登录。我尝试了很多代码,但我不理解在互联网上找到的登录/注册代码

例如,我所尝试的:

@echo off
title Login and Register
cls

:register
cls
set /p name="Username: "
echo %name% >> username.txt
cls
set /p password="Password: "
echo %password% >> password.txt
goto :login

:login
cls
set /p uname="Username: "
if %uname% EQU %name% goto :program
if not %uname% EQU %name% goto :error
cls
set /p pass="Password: "
if %pass% EQU %password% goto :program
if not %pass% EQU %password% goto :error

:program
cls
echo Welcome!
echo.
pause

所以,这只是我的登录代码的示例。我试了很多东西,但还是一样。我擅长编程,所以经验不多,希望大家都能理解。谢谢。

创建批处理脚本来处理身份验证的问题在于,编辑批处理脚本并在顶部附近插入
转到程序
非常容易。你为自己创造了大量的工作,却收获甚微

上面的脚本缺少的是,在
:login
部分中,您没有读取password.txt中存储的值。所以
“%uname%”
永远不会等于
“%name%”
。还有很多其他的东西丢失了,尤其是在文本文件中存储纯文本密码是危险的

如果你坚持沿着这条路走下去,那就试试这个。它将密码存储为Base64编码的SHA512散列,并加上用户名。这样,您的项目至少不会那么危险(假设攻击者不知道用户名)

%loginfile%”回显(%hash%
后藤大街
)
转到注册
:登入
欢迎来到nx0!请登录。输入“新建”以注册新帐户。
设置/P“用户=用户名?”
如果/I“%user%”==“new”转到注册
调用:密码提示哈希普通“%user%”
查找NUL||(
回显无效凭据。
转到登录
)
:main
rem//如果需要,输入的密码将存储在%plain%中
echo登录成功。享受你的劳动成果。
wmic操作系统获取localdatetime/值
rem//结束主运行时
后藤:EOF
:passwordPrompt
setlocal disabledelayedexpansion
设置“用户=%~3”
对于/f“delims=“%%I in($powershell-noprofile“iex(${%f0}| out string)”),请设置“%%I”
endlocal&&set“%$1=%h%”和&set“%$2=%p%”和&exit/b
:结束批处理/开始PowerShell混合代码#>
$env:user=$env:user.toLower()
[控制台]::错误。写入(“$($env:user)的密码”)
$i=读取主机-AsSecureString
$m=[Runtime.InteropServices.Marshal]
$p=$m::PtrToStringAuto($m::SecureStringToBSTR($i))
“h={0}”-f[Convert]::ToBase64String([Security.Cryptography.HashAlgorithm]::Create(`
'SHA512').ComputeHash([Text.Encoding]::UTF8.GetBytes($($env:user)`n$p”))
“p=$p”

下面是同一个脚本,带有注释。如果你想进一步解释的话,请告诉我

%loginfile%”回显(%hash%
后藤大街
)
转到注册
:登入
欢迎来到nx0!请登录。输入“新建”以注册新帐户。
设置/P“用户=用户名?”
如果/I“%user%”==“new”转到注册
rem#调用:passwordPrompt函数,该函数将设置%hash%和%plain%
调用:密码提示哈希普通“%user%”
rem#如果登录文件中不存在哈希,则验证失败。
查找NUL||(
回显无效凭据。
转到登录
)
:main
rem#如果需要,输入的密码将存储在%plain%中
echo登录成功。享受你的劳动成果。
wmic操作系统获取localdatetime/值
rem#结束主运行时
后藤:EOF
rem#:密码提示功能
rem#前两个参数是要用返回值填充的空变量的名称。
rem#第三个参数是用户名。没有修改。
:passwordPrompt
setlocal disabledelayedexpansion
设置“用户=%~3”
rem#使用“for/f”捕获powershell命令的输出。这是动力地狱
rem#命令执行此脚本底部的混合部分。
对于/f“delims=“%%I in($powershell-noprofile“iex(${%f0}| out string)”),请设置“%%I”
rem#要了解有关批处理函数返回值的更多信息,请参阅本教程:
雷姆http://www.dostips.com/DtTutoFunctions.php
endlocal&&set“%$1=%h%”和&set“%$2=%p%”和&exit/b
rem#结束多行PowerShell注释块。开始编写PowerShell脚本。
:结束批处理/开始PowerShell混合代码#>
#使用户名不区分大小写
$env:user=$env:user.toLower()
#输出到stderr,以避免被for/f捕获或静音
[控制台]::错误。写入(“$($env:user)的密码”)
#获取用户输入。用星星隐藏击键。作为安全对象存储
$secure=读取主机-AsSecureString
#封送直接访问RAM
$marshal=[Runtime.InteropServices.marshal]
#获取指向包含输入字符串的RAM位置的指针
$PTR=$Marshall::SecureStringToBSTR($secure)
#在该指针处检索RAM的内容
$plain=$marshal::PtrToStringAuto($PTR)
#将salt+换行符+$plain转换为字节数组
$bytes=[Text.Encoding]::UTF8.GetBytes($($env:user)`n$plain”)
#创建SHA512哈希算法
$SHA512=[Security.Cryptography.HashAlgorithm]::Create('SHA512')
#计算散列
$hash=$SHA512.ComputeHash($bytes)
#将哈希转换为Base64
$b64=[Convert]::ToBase64String($hash)
#输出结果
“h=$b64”
“p=$plain”

非常好的代码!我刚刚测试了它,我喜欢使用powershell函数的技巧。我正在向您学习新的东西,只要您有时间让我对您的代码添加一些注释!再次感谢你;)@它很难写,所以也应该很难读。(我开玩笑)你有什么特别想注释的部分吗?如果您对Batch+PowerShell polyglot格式感兴趣,那么它通常有不同的示例。您的代码运行良好,非常感谢您的努力,但是有什么方法可以使代码更简单?我的朋友告诉我,我可以通过命令“echo@miragetv7”加载txt或dll文件。我想你的朋友提到的是
set/P”variable=“<“txtfile.txt”
,但这种约定只有在你已经确定了li的数量时才适用