2013-08-28 35 views
3

我有一个批处理脚本,其中包含一个密码,作为需要凭据的命令的一部分,我不想提示输入凭据。我并不担心外部威胁,但我并不是真的想要一个同事在那里看到密码。虽然我相信他们不要滥用它,但我宁愿不要在那里使用它。在批处理脚本中混淆密码

通过在文本文件中存储安全字符串,我可以非常容易地使用PowerShell进行此操作。很基本,但至少没有纯文字密码。这就是我真正需要的。

如何在批处理脚本中混淆密码?

+0

如果没有第三方工具批量处理,您无法有效隐藏密码。 – Endoro

+0

您可以尝试使用'certutil'将其编码为十六进制或base64(或两者) - > http://ss64.com/nt/certutil.html。这是现在最容易理解的东西。 – npocmaka

+0

@npocmaka这可以工作,我甚至不需要加密它......只是任何不是纯文本的东西。 – tnw

回答

6

您也可以隐藏在备用数据流密码:

首先,添加了几分秘密口令到脚本的备用数据流:

echo somewhatsecretpassword>script.bat:pwd 

这里是如何检索进入变量的密码%p%

for /f "usebackq delims=" %i in (script.bat:pwd) do set p=%i 

从批处理文件本身你可以y使用类似于:

for /f "usebackq delims=" %%i in (%~0:pwd) do set p=%%i 

这不安全!

请考虑:

  • 这是不安全的!
  • 交换数据流不会被复制无处不在(FAT)
  • 包含特殊字符的密码可能需要以进行转义得到正确写入流
  • ...它是不安全的
+1

我建议立即在'FOR'中使用命令行,以避免将密码存储在环境变量中。 –

+0

nitpicky语法:'您也可以在[n]替代数据流中隐藏密码'。当下面的单词以元音声音开始时(比较'引擎'和'引擎'),总是使用'​​an'形式。解决方案就是我正在寻找的东西 - 只是足以防止表面好奇,并在文件被复制时丢失秘密。 – Charemer

+0

@Charemer我刚刚纠正了它,我确实在第二行上得到了它。 – marapet

2

这样做

:main 
set a=pas 
set b=rd 
set /p input= 
if %input%==%a%swo%b% goto start 
:start 
<your code here> 
goto main 

密码是“密码”,但它是一个有点混淆。