在批处理文件中登录并注册系统

2024-03-04

所以,我非常努力地尝试在批处理文件中制作登录和注册系统。我注册成功,只是将用户名和密码回显到 .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

所以,这只是我的登录代码的示例。我尝试了很多事情但它仍然是一样的。我是编程新手,经验不足,希望大家理解。谢谢。


创建批处理脚本来处理身份验证的问题在于,某人可以轻松编辑批处理脚本并简单地插入goto program靠近顶部。你为自己创造了大量的工作,却收效甚微。

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

如果你坚持走这条路,那就试试这个。它将密码存储为 Base64 编码的 SHA512 哈希值,并与用户名一起加盐。这样你的项目至少不会那么危险(假设攻击者不知道用户名)。

<# : Batch portion
@echo off & setlocal disabledelayedexpansion

set "loginfile=%~dpn0.data"
if exist "%loginfile%" goto login

:registration
echo Welcome to %~nx0!  Please register.
set /P "user=Username? "
call :passwordPrompt hash plain "%user%"

if defined user if defined hash (
    >> "%loginfile%" echo(%hash%
    goto main
)
goto registration

:login
echo Welcome to %~nx0!  Please log in.  Enter "new" to register a new account.
set /P "user=Username? "
if /I "%user%"=="new" goto registration
call :passwordPrompt hash plain "%user%"
find "%hash%" "%loginfile%" >NUL || (
    echo Invalid credentials.
    goto login
)

:main
rem // In case you need it, the entered password is stored in %plain%
echo Login successful.  Enjoy the fruits of your labor.
wmic os get localdatetime /value

rem // end main runtime
goto :EOF

:passwordPrompt <return_hash> <return_plain> <username>
setlocal disabledelayedexpansion
set "user=%~3"
for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0}|out-string)"') do set "%%I"
endlocal && set "%~1=%h%" && set "%~2=%p%" && exit /b

: end Batch / begin PowerShell hybrid code #>
$env:user = $env:user.toLower()
[console]::Error.Write("Password for $($env:user)? ")
$i = read-host -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"

这是带有注释的相同脚本。如果您需要进一步解释,请告诉我。

<# : Batch portion
@rem # The previous line does nothing in Batch, but begins a multiline comment block
@rem # in PowerShell.  This allows a single script to be executed by both interpreters.
@echo off

rem # setlocal limits the scope of variables to this script.
rem # disabledelayedexpansion prevents exclamation marks from being mangled
setlocal disabledelayedexpansion

rem # set "loginfile=drive:\path\to\BatFileBaseName.data"
set "loginfile=%~dpn0.data"
if exist "%loginfile%" goto login

:registration
echo Welcome to %~nx0!  Please register.
set /P "user=Username? "

rem # calls the :passwordPrompt function, which will set %hash% and %plain%
call :passwordPrompt hash plain "%user%"

if defined user if defined hash (
    >> "%loginfile%" echo(%hash%
    goto main
)
goto registration

:login
echo Welcome to %~nx0!  Please log in.  Enter "new" to register a new account.
set /P "user=Username? "
if /I "%user%"=="new" goto registration

rem # calls the :passwordPrompt function, which will set %hash% and %plain%
call :passwordPrompt hash plain "%user%"

rem # If hash doesn't exist in login file, then fail auth.
find "%hash%" "%loginfile%" >NUL || (
    echo Invalid credentials.
    goto login
)

:main
rem # In case you need it, the entered password is stored in %plain%
echo Login successful.  Enjoy the fruits of your labor.
wmic os get localdatetime /value

rem # end main runtime
goto :EOF

rem # :passwordPrompt function
rem # The first two args are the names of empty vars to be populated with return values.
rem # The third arg is the username.  It's not modified.
:passwordPrompt <return_hash> <return_plain> <username>
setlocal disabledelayedexpansion
set "user=%~3"

rem # Use "for /f" to capture the output of the powershell command.  This powershell
rem # command executes the hybrid portion at the bottom of this script.
for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0}|out-string)"') do set "%%I"

rem # To learn more about returning values from Batch functions, see this tutorial:
rem # http://www.dostips.com/DtTutoFunctions.php
endlocal && set "%~1=%h%" && set "%~2=%p%" && exit /b

rem # End multi-line PowerShell comment block.  Begin PowerShell scripting.
: end Batch / begin PowerShell hybrid code #>

# Make username case-insensitive
$env:user = $env:user.toLower()

# Output to stderr to avoid being captured or silenced by for /f
[console]::Error.Write("Password for $($env:user)? ")

# Get user input.  Hide keystrokes with stars.  Store as a secure object
$secure = read-host -AsSecureString

# Marshal direct access to RAM
$marshal = [Runtime.InteropServices.Marshal]

# Get pointer to RAM location containing entered string
$PTR = $marshal::SecureStringToBSTR($secure)

# Retrieve contents of RAM at that pointer
$plain = $marshal::PtrToStringAuto($PTR)

# Convert salt + line feed + $plain to a byte array
$bytes = [Text.Encoding]::UTF8.GetBytes("$($env:user)`n$plain")

# Create SHA512 hash algorithm
$SHA512 = [Security.Cryptography.HashAlgorithm]::Create('SHA512')

# Compute hash
$hash = $SHA512.ComputeHash($bytes)

# Convert hash to Base64
$b64 = [Convert]::ToBase64String($hash)

# Output results
"h=$b64"
"p=$plain"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在批处理文件中登录并注册系统 的相关文章

  • 创建批处理文件以更改 Windows 7 中的电源选项

    有没有办法创建批处理文件并将其放在桌面上以更改 Windows 7 中的电源选项 具体来说 我将计算机设置为 30 分钟后休眠 现在我使用 Serve To Me Stream To Me 应用程序 我希望能够快速更改电源设置以允许连续操作
  • 命令提示符中的代码在批处理文件中不起作用

    当我在命令提示符中执行下面的代码时 它会执行我想要的操作 但当我将其放入 bat 文件并尝试执行它时 它不会执行我想要的操作 for f a in dir b csv do for f tokens b in a do echo b a g
  • 从android执行.bat文件

    我正在尝试执行 xxx bat 文件以从我的 Android 应用程序重命名该文件 听到的是我的代码 Runtime getRuntime exec Environment getExternalStorageDirectory File
  • 如何删除所有超过 2 天的空文件夹?

    我制作了一个脚本 删除路径中带有子文件夹的所有空文件夹 现在我必须做的是 如果一个文件夹是 2 天前创建的 并且它是空的 则应该将其与其他早于 2 天的空文件夹一起删除 如果不是 则不应删除它 我还需要 想要将已删除的文件夹写入日志中 我用
  • 从MAC地址获取IP。 arp -a 不显示设备

    我正在尝试编写一个批处理文件 该文件应该在连接到网络 腾达 WiFi 路由器 时找到我的 Android 手机的动态分配的 IP 所以我正在尝试arp a并搜索我手机的 MAC 地址 以便我可以从表中获取其 IP C Users Leero
  • 如何在批处理文件的“If”中使用多个条件?

    我可以在批处理文件中使用 或 和 指定多个条件吗if block 如果不是那么复杂 我至少可以使用类似的东西 if value1 lt value lt value2 基本上我的目的是检查当前系统时间是否落在某个时间间隔内 准确地说是上午
  • 如何运行 .bat 文件而不弹出 cmd 窗口?

    我有一个 bat 文件 我正在尝试在 Jenkins 中运行 Jenkins 作为服务运行 因此不会识别弹出窗口 有没有办法以静默模式运行这个 bat 文件 或者不允许弹出 cmd 窗口 那么你可以使用start命令与 min and b切
  • 在正确的时机批量创建视频 .srt 字幕

    好家伙 我什至不知道从什么开始 所以 我有一个包含很多视频的文件夹 我需要的是使用这些视频的名称创建字幕 同时注意其长度以创建 srt 格式的字幕 我已经查找了一些信息并复制了一些代码 echo off set dirpath 1 dir
  • Windows批量编程中读取文件名

    我想在Windows批处理编程中读取文件的名称 我尝试使用不同的方法但失败了请帮助 下面给出了场景 我的文件夹中有不同的文件 但所有文件的文件名长度相同 例如 1000342578 30062011 PDF 1000342329 30062
  • 批处理文件中的 Powershell - 如何转义元字符?

    运行 Windows 7 当我复制文件在例程期间到外部磁盘文件备份 我使用 Powershell v2 从批处理文件 在副本文件上重新创建原始文件的所有时间戳 以下代码在大多数情况下都能成功运行 但并非总是如此 SET file 1 SET
  • shell进程的并行执行

    有没有一个工具可以在 Windows 批处理文件中并行执行多个进程 我发现了一些有趣的 Linux 工具 parallel http mi eng cam ac uk er258 code parallel html and PPSS ht
  • 批处理中嵌套 IF ( IF ( ... ) ELSE( .. ) ) 语句

    我正在尝试写一个IF ELSE语句嵌套在另一个语句中IF陈述 这是我所拥有的 IF dirdive 1 IF DEFINED log ECHO DATE TIME gt gt log FOR R root1 G IN DO SET G G
  • 双击时将文件名传递给 Windows 批处理 (.bat) 脚本,以便它将以八度运行

    我是使用批处理脚本的新手 并且对八度音程有一定的经验 我有很多使用八度函数检查的数据文件 我正在尝试进行设置 以便我可以双击具有自定义扩展名的文件来直接打开八度函数 想想 当我双击这个文本文件时 它会在记事本中打开 为此 我写了一个非常基本
  • 在批处理脚本中发送 Windows 密钥

    我最近一直在使用SendKeys使用批处理脚本的函数 我已经了解如何在窗口中输入某些键 例如 Tab 键 SendKeys TAB 或者退格键 SendKeys BACKSPACE 但我一直尝试在不按Windows键的情况下输入它 不幸的是
  • Windows批处理支持异常处理吗?

    Windows批处理编程支持异常处理吗 如果没有 是否有任何方法可以有效地模拟批处理文件中的异常处理 我希望能够在批处理脚本中的任何 CALL 级别的任何位置 抛出异常 并重复弹出 CALL 堆栈 直到找到活动的 TRY 块 然后 CATC
  • 批量读取INI文件并将其设置为全局变量

    我有一个批处理文件 它已经做了很多事情 并试图扩展它以从 ini 文件中获取一些数据 例如 ini 文件看起来像这样 Settings1 Text Text Text1 Text Text2 Text Settings2 Text Text
  • 有没有办法回显所有驱动器/分区的列表,例如 C:\ D:\ E:\ 等并提示用户选择其中一个来执行某些功能?

    我想知道是否有一种方法可以检查并回显 PC 上所有可用驱动器 分区的列表 并提示用户通过输入字母并按 Enter 提交来选择其中一个 然后批处理文件将继续 理想的结果可能是怎样的 echo off echo List all drives
  • 已安装全局 NPM 包但未找到命令

    我已经全局安装了两个 npm 包 下载 https www npmjs com package download and 谜虚拟盒 https www npmjs com package enigmavirtualbox通过命令行 npm
  • 使用变量更改批处理文件中的目录

    这是问题 set Pathname C Program Files cd Pathname pause 正如我所期望的 上面的内容不会更改目录 有人可以告诉我为什么吗 The set语句不会按照您期望的方式处理空格 你的变量确实被命名了Pa
  • Windows 2000 说超时不是命令或批处理文件

    我只是在摆弄 CMD 并制作动画 ASCII 艺术 我一直在尝试在 Windows 2000 笔记本电脑上使用 超时 命令 但是每次我尝试这样做时 它只是说它不是内部或外部命令或批处理文件 这是一台运行 Windows 2000 的旧东芝

随机推荐

  • 现代如何使用汇编(例如 C/C++)?

    我了解计算机如何按照基本原理工作 例如 可以用 C C 等 高级 语言编写程序 然后将其分解为目标代码 然后分解为二进制代码以供处理器理解 然而 我真的很想了解汇编 以及它如何在现代应用程序中使用 我知道处理器在基本 x86 指令集之上有不
  • 使用 python 进行动态时间扭曲(最终映射)

    我需要对齐两个声音信号 以便将一个声音信号映射到另一个声音信号 两个信号对应相同的行为 我尝试从以下位置实现 python 代码 https nipunbatra github io blog 2014 dtw html https nip
  • multipart/form-data 可以用 javascript 发送吗?

    我使用以下形式通过 POST 发送文件以及文本 名称
  • casper.js 中的 setInterval 和 this.wait

    我需要做一个循环每次迭代之间间隔 3 次 2 秒 我尝试了以下 3 个选项 Option 1 var casper require casper create verbose false logLevel debug casper star
  • 如何让 OpenCover 查看本地 bin\Debug 文件夹中的 PDB 而不是 GAC

    我正在使用 OpenCover 4 7 922 和 nUnit 控制台运行程序 3 10 0 我有一个myproj tests测试的项目myproj 建成后 myproj tests bin debug包含myproj tests dll
  • 调用soap webservice从带有轴的java客户端返回对象列表

    我对网络服务感到恼火 我有一个非常简单的肥皂网络服务 Remote public interface StudentService public String sayHello public List
  • 无法创建 MoveConstructibles 地图

    我有一堂课包含std unique ptr lt gt 我想把这个类的实例放在一个std map lt gt 我认为推动 C 引入移动语义的原因之一是可以将诸如unique ptrs在标准容器内 对于向量而言 这确实有效 但在我看来std
  • 用于安装/升级 .NET Core 的命令行

    是否有用于安装或升级 NET Core 的命令行命令 我使用以下命令检查我的计算机上是否安装了 NET Coredotnet version只是注意到我的计算机上仍然安装了预览版本 我想知道是否可以发出一些命令将其升级到最新版本 没有dot
  • 普通对象 VS 模型对象的类实例

    在 Angular TypeScript 中创建模型对象的最佳实践是什么 我应该使用带有对象表示法的类型注释 对象是Object E g let m MyModel name foo 我应该使用new运算符 对象是各自原型的实例 这两种方法
  • Git - 冲突(重命名/删除)是什么意思?

    我在理解其他问题中的含义方面没有取得多大成功 这是一个 Ruby on Rails 项目 如果您知道该怎么做 这可能非常简单 我尝试合并两个分支 这是结果的 部分 CONFLICT rename delete db migrate 2016
  • 如何找到预告片字典?

    浏览 PDF 规范 它说trailer之前的startxref 对我来说 这意味着xref可以出现在文档中的任何位置 但是trailer仍然出现在startxref 在您必须解析它之前 这是有意义的 因为您必须反向解析 您无法考虑注释或字符
  • 行分隔的 json 序列化和反序列化

    我正在使用 JSON NET 和 C 5 我需要将对象列表序列化 反序列化为行分隔的 json http en wikipedia org wiki Line Delimited JSON http en wikipedia org wik
  • Java中如何通过代理发送HTTPS请求?

    我正在尝试使用 HttpsUrlConnection 类向服务器发送请求 服务器存在证书问题 因此我设置了一个信任所有内容的 TrustManager 以及一个同样宽松的主机名验证器 当我直接发出请求时 这个管理器工作得很好 但当我通过代理
  • fputcsv 不会在 CSV 文件中写入任何数据

    在我的网站中 我从 mysql 数据创建一个表 然后现在我想在表底部添加一个导出按钮 以便用户能够将数据下载为 CSV 文件 为此 我编写了虚拟表单
  • preg 匹配重复或增量字符

    我使用 preg match 来验证密码 preg match 5 password 它也接受特殊字符 但由于某种原因 我需要修改它应该接受 仅限字母数字 至少 5 个字符长 非常重要的是它不能有任何重复或 增量字符 例如 aaaa 或 1
  • 对各个页面的不同图像使用 Backstretch

    我希望有人可以提供帮助 我正在尝试使用 jQuery Backstretch 为 Bootstrap Wordpress 中的每个特定页面应用不同的背景图像 例如 主页 bg 图像 a 关于 bg 图像 b 新闻 bg 图像 c 等等 我已
  • 在自定义验证器指令中注入 ngControl 会导致循环依赖

    我正在尝试创建自定义 Angular 2 验证器指令 它像这样注入 NgControl Directive selector ngModel customValidator providers provide NG VALIDATORS u
  • 有关 CUDA 中统一虚拟寻址 (UVA) 的信息/示例

    我试图理解 CUDA 中统一虚拟寻址 UVA 的概念 我有两个问题 是否有任何示例 伪 代码可以演示这个概念 我在 CUDA C 编程指南中读到 UVA 只能在 64 位操作系统上使用 为什么会这样呢 A 统一虚拟地址空间 http doc
  • 如何使用 Hibernate Context 会话创建通用 DAO 类

    我正在尝试使用 Hibernates Context Sessions 实现通用 DAO 以下是我的镜头 import java io Serializable public interface GenericDao
  • 在批处理文件中登录并注册系统

    所以 我非常努力地尝试在批处理文件中制作登录和注册系统 我注册成功 只是将用户名和密码回显到 dll 文件或 txt 文件 但我不知道如何登录 我尝试了很多代码 但我不明白在互联网上找到的登录 注册代码 例如 我尝试过的 echo off