用shell编写的简单密码加密程序,涉及到ASCII与字符的相互转换,以及命令结果输出到变量

本来是一道C语言的题目,用C语言实现太简单,所以给自己找点有挑战性的玩法:用bash shell编写

加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。 算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。例如,China转换成密文为G l m r e。要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。

  1. #!/bin/bash
  2. read -p "please input password:" password
  3. for ((i=0;i<${#password};i++))
  4. do
  5. var2=`printf "%d" "'${password:$i:1}"`
  6. if (([ $var2 -gt 96 ] && [ $var2 -lt 123 ])||([ $var2 -gt 65 ] && [ $var2 -lt 91 ]))
  7. then
  8. if (([ $var2 -gt 65 ] && [ $var2 -lt 87 ])||([ $var2 -gt 96 ] && [ $var2 -lt 119 ]))
  9. then
  10. let var2=$var2+4
  11. printf \\x`printf %x $var2`
  12. #echo -n " "
  13. fi
  14. if (([ $var2 -gt 86 ] && [ $var2 -lt 91 ])||([ $var2 -gt 118 ] && [ $var2 -lt 123 ]))
  15. then
  16. let var2=$var2-22
  17. printf \\x`printf %x $var2`
  18. #echo -n " "
  19. fi
  20. echo -n " "
  21. else
  22. printf \\x`printf %x $var2`
  23. echo -n " "
  24. fi
  25. done
  26. echo
#!/bin/bash

read -p "please input password:" password

for ((i=0;i<${#password};i++))
do
  var2=`printf "%d" "'${password:$i:1}"`
 if (([ $var2 -gt 96 ] && [ $var2 -lt 123 ])||([ $var2 -gt 65 ] && [ $var2 -lt 91 ])) 
 then
  if (([ $var2 -gt 65 ] && [ $var2 -lt 87 ])||([ $var2 -gt 96 ] && [ $var2 -lt 119 ]))
  then
   let var2=$var2+4
   printf \\x`printf %x $var2`
   #echo -n " "
  fi
  if (([ $var2 -gt 86 ] && [ $var2 -lt 91 ])||([ $var2 -gt 118 ] && [ $var2 -lt 123 ]))
  then
   let var2=$var2-22
   printf \\x`printf %x $var2`
   #echo -n " "
  fi
  echo -n " "
 else 
   printf \\x`printf %x $var2`
   echo -n " "
 fi
done
echo 

其中:
printf \\x`printf %x $var2` 负责将ascii码转成字符
${#password} 可以计算变量长度
${password:$i:1} 可变量中单个字符,$i存放第几个字符,1表示输出一个字符,如改成2则可一次输出两个字符
var2=`printf "%d" "'${password:$i:1}"` 很实用的语句,可以让命令执行结果输出写入到变量,· ... ·的用法,注意是ESC下面的那个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值