连接 md5 字符串

连接 md5 字符串

我有一个名为的小脚本文件testing.sh,我要求用户输入其登录名和密码。然后,使用md5sum命令对密码进行加密,并将结果存储在results.txt格式为的文件中login:md5password。但是,当我查看results.txt文件时,我只得到login:,加密的密码没有连接。我做错了什么?

文件如下testing.sh

#!bin/bash
read -p 'Your login: ' uservar
read -sp 'Your password: ' passvar

var=$passvar|md5sum
echo $uservar:$var > ~/Desktop/results.txt

results.txt文件:

login:

答案1

var你以错误的方式完成作业。

var=$passvar|md5sum

您应该将其发送"$passvar"md5sum。它不会|自行通过管道,因此您需要使用echoprintf。这将输出内容到stdout流中。您可以使用命令替换将其捕获到变量中$(...)。换句话说,您应该这样做:

var=$( echo "$passvar" | md5sum )

另外,请记住引用变量以保持存储在其中的数据的完整性,并防止单词拆分


其他事宜:

$ read -sp 'Your password:' passvar
Your password:$ var=$( echo "$passvar" | md5sum )
$ echo "$var"
2b00042f7481c7b056c4b410d28f33cf  -

请注意以下两点:"Your password" 后面没有换行符,因此您可能需要echo在该命令后面添加换行符。其次,请注意md5sum计算出的 md5 校验和后面的输出文件名,在本例中为-stdin流。您可能需要考虑通过任何允许您删除单词的文本处理实用程序删除该部分,例如awk

var=$( echo "$passvar" | md5sum | awk '{print $1}')

或者,您也可以使用bashread 和 here-string <<<(请参阅有关该运算符的更多信息):

$ read var trash <<< $( echo "$passvar" | md5sum )
$ echo "$var"
2b00042f7481c7b056c4b410d28f33cf

最后但同样重要的一点是,您的行之前#!缺少了- 应该是。/bin#!/bin/bash

完整的脚本应该是这样的:

#!/bin/bash
read -p 'Your login: ' uservar
read -sp 'Your password: ' passvar
printf "\n"
read var trash <<< "$(printf "%s" "$passvar" | md5sum)"
printf "%s:%s" "$uservar" "$var" #> ~/results.txt

请注意,我注释掉了重定向到文件,只是为了在终端上查看输出以进行测试。它的工作原理如下:

$ ./testing.sh 
Your login: johndoe
Your password: 
johndoe:912ec803b2ce49e4a541068d495ab570$ 

为了便于将来参考,您可以set -x在之后添加#!/bin/bash(当然,前提是您已正确定义了该#!行)来排除脚本故障,并查看实际运行的命令以及可能出现的错误。或者直接使用外壳检查在线工具。

答案2

以下脚本也对我有用。

#!/bin/bash
echo -n 'Your login:'
read uservar

echo -n 'Your password:'
read -s passvar

printf "\n"

encrpt=$(echo "$passvar" | md5sum | awk '{print $1;}')

echo "$uservar":"$encrpt" > /home/bond/result.txt

输出

bond@hp-pc:~$ ./test.sh 
Your login:bond
Your password:
bond@hp-pc:~$ cat result.txt 
bond:22c291f0335f869c154d8081854d9119

相关内容