Bash 脚本旋转密码

Bash 脚本旋转密码

你好,我需要编写一个 Bash 脚本旋转密码。不幸的是,我现在无法继续。接下来,我需要使用 If-Else 条件将字母转换为数字,然后按字母移动加 5。有人能帮我怎么做吗?

谢谢

#!/bin/bash
#ROT=$1
ROT=5
TEXT=$2
CRYPT_TEXT=""

echo $ROT
echo $TEXT

echo "crypted: $CRYPT_TEXT"

for c in $(echo $TEXT | sed -e 's/\(.\)/\1\n/g')
do
  echo $c
done

答案1

在 Bash 中可以使用以下方法转换为大写:

TEXT="foobar" 
echo ${TEXT^^}

可以使用以下方法实现旋转密码tr,例如rot13:

echo $TEXT | tr 'A-Za-z' 'N-ZA-Mn-za-m'
# sbbone

rot5 看起来会像这样:

echo $TEXT | tr 'A-Za-z' 'F-ZA-Ef-za-e'
# kttgfw

无命令的部分版本tr

#!/bin/bash

TEXT="AZ"

for (( i=0; i<${#TEXT}; i++ )); do
  printf "%s -> %d\\n" "${TEXT:$i:1}" \'${TEXT:$i:1}
  printf -v val "%d" \'${TEXT:$i:1}
  shifted=$(($val + 5))
  echo "shifted: $shifted"
  printf "\\$(printf '%03o' $shifted)\n"

  # A-Z is in range:
  # 65-90
  if [[ $shifted -gt 90 ]];then
    # if value is greated than Z letter you need to subtrack 26
    # so that 91 would become letter A
    echo "$shifted val too large"
    corrected=$(( $shifted - 26))
    echo "corrected ord value $corrected"
    printf "\\$(printf '%03o' $corrected)\n"
  fi
done

输出应如下所示:

A -> 65
shifted: 70
F
Z -> 90
shifted: 95
_
95 val too large
corrected ord value 69
E

该脚本将字母转换为其对应的 ASCII 代码,执行移位并将代码转换回字母。您需要确保它适用于大写和小写字母(或仅支持其中一种)。我将其余部分留给读者练习。

相关内容