随机密码生成器开发

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本项目中,你将学习如何创建一个符合特定安全要求的随机密码生成脚本。该脚本将生成一个包含至少一个数字、一个大写字母、一个小写字母以及一个来自 ><+-{}:.&; 集合的特殊字符的 12 位密码。本项目将为你提供脚本编写和随机数据处理的实际操作经验。

👀 预览

$ cd /home/labex/project
$ sh genpass.sh
## 示例
2Dsxw9+xS:27

🎯 任务

在本项目中,你将完成以下任务:

  • 设置项目环境并创建必要的脚本文件。
  • 实现生成符合指定复杂度要求的随机密码的逻辑。
  • 测试密码生成脚本以确保其功能正常。

🏆 成果

完成本项目后,你将能够:

  • 理解创建随机密码生成脚本的过程。
  • 实现满足特定字符类型要求的密码生成算法。
  • 测试并验证生成的密码,确保其符合预期标准。

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/tr("Character Translating") linux/VersionControlandTextEditorsGroup -.-> linux/vim("Text Editing") subgraph Lab Skills linux/echo -.-> lab-301485{{"随机密码生成器开发"}} linux/test -.-> lab-301485{{"随机密码生成器开发"}} linux/touch -.-> lab-301485{{"随机密码生成器开发"}} linux/cd -.-> lab-301485{{"随机密码生成器开发"}} linux/tr -.-> lab-301485{{"随机密码生成器开发"}} linux/vim -.-> lab-301485{{"随机密码生成器开发"}} end

设置项目环境

在这一步中,你将准备你的工作环境并创建密码生成脚本所需的文件。

  1. 打开终端,使用 cd 命令导航到 /home/labex/project 目录:

    cd /home/labex/project
  2. 使用 touch 命令创建一个名为 genpass.sh 的新文件。这将是编写密码生成脚本的文件:

    touch genpass.sh
  3. 在文本编辑器中打开 genpass.sh 文件。你可以使用 nanovim 或任何你喜欢的文本编辑器。在文件的最开头添加以下 shebang 行:

    #!/bin/zsh
    
    ## Random Password Generator
    ## This script generates a random password that meets the specified requirements.

    这一行告诉系统使用 zsh shell 来执行脚本。shebang 行后面的注释提供了脚本的简要描述。

实现密码生成逻辑

在这一步中,你将为 genpass.sh 脚本添加核心逻辑,以生成符合复杂度要求的随机密码。

  1. genpass.sh 文件中,添加以下函数来生成密码:

    ## Function to generate a random password
    generate_password() {
      local length=12
      local password=''
    
      ## Special characters
      local special_chars='><+-{}:.&;'
      local special_char="${special_chars:$RANDOM%${#special_chars}:1}"
      password+="$special_char"
    
      ## Digits
      local digits='0123456789'
      local digit="${digits:$RANDOM%${#digits}:1}"
      password+="$digit"
    
      ## Uppercase letters
      local upper_case='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
      local upper="${upper_case:$RANDOM%${#upper_case}:1}"
      password+="$upper"
    
      ## Lowercase letters
      local lower_case='abcdefghijklmnopqrstuvwxyz'
      local lower="${lower_case:$RANDOM%${#lower_case}:1}"
      password+="$lower"
    
      ## Remaining characters
      local remaining_length=$((length - 4))
      local characters='><+-{}:.&;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
      local num_characters=${#characters}
    
      for ((i = 0; i < remaining_length; i++)); do
        local random_char="${characters:$RANDOM%$num_characters:1}"
        password+="$random_char"
      done
    
      ## Shuffle the order of password characters
      password=$(echo "$password" | fold -w1 | shuf | tr -d '\n')
    
      echo "$password"
    }

    该函数的工作原理如下:

    • 初始化密码时包含一个特殊字符、一个数字、一个大写字母和一个小写字母,以满足基本要求。
    • 计算剩余字符的数量,以达到 12 位的目标长度。
    • 从数字、字母(大小写)和特殊字符的池中随机选择剩余字符。
    • 对密码进行随机排序,以确保特定字符不会总是出现在开头。
  2. genpass.sh 文件的末尾添加以下代码。这部分脚本调用 generate_password 函数并将生成的密码输出到控制台:

    ## Generate password and output
    generate_password

测试密码生成器

在这一步中,你将测试 genpass.sh 脚本,以确保其生成的密码符合所有要求。

  1. 在文本编辑器中保存 genpass.sh 文件。

  2. 在终端中,使用 chmod 命令使脚本可执行:

    chmod +x genpass.sh

    该命令为文件添加执行权限,使其可以作为程序运行。

  3. 使用以下命令运行脚本:

    sh genpass.sh

    脚本应输出一个随机的 12 位密码到控制台。输出应包含至少一个特殊字符、一个数字、一个大写字母和一个小写字母。

    ## 示例
    2Dsxw9+xS:27
  4. 多次运行脚本。每次运行都应生成不同的密码。这验证了密码生成器中的随机性功能正常工作。

恭喜!你已成功实现并测试了一个符合指定复杂度要求的随机密码生成器。

✨ 查看解决方案并练习

总结

恭喜!你已经完成了本项目并创建了一个随机密码生成脚本。你现在有了一个基础,可以在未来的脚本项目中继续扩展。
你可以继续在 LabEx 上练习更多实验,以进一步提升你的技能。