開發與維運

算法解密84位加密,進制轉換解密腳本

#!/bin/bash
# 算法解密84位加密,進制轉換解密腳本
# 腳本開發:萬楊
# 由於企業保密要求,本次算法過程已經經過更改處理
bcrpm=`rpm -qa | grep "^bc" | wc -l`
                                          # 定義bcrpm變量:查看已安裝包,過濾開頭為 bc 並且 wc -l 進行計數
if [ $bcrpm -lt 1 ]              # lt 小於:參考:shell if 條件判斷文件或目錄;字符串長度或為空,邏輯運算: eisc.cn/index.php?c=read&id=409&page=1
then
yum install -y bc                # 安裝進制轉換工具
else
echo "bc 工具已經安裝"
fi
clear
read -p "請輸入需要解密的20進制msgid字符:" a
echo "截取前20位字符:"
a=`echo $a | cut -c1-10` ; echo $a
                                # cut -c1-20 字符串1到20位數
echo "轉換為 10進制字符串:"
((a=20#$a)) ; echo $a
                                # 將20進制轉換為10進制
er=`echo "obase=2;$a" | bc`
                               # 定義變量 er為:打印10進制變量,並且轉換為 二進制
cz=`echo $[86-${#er}]`
                              # 定義cz變量:echo $[]  進行計算,兩個數相減法運算
echo "$er  共 ${#er} 位數二進制 , 需要補0個數:$cz 正在進行msgid解密,請稍等!"
echo "正在參與解密計算請稍後!"
                            # 打印變量字符串長度:echo ${# }
    c1=1
    c2=`echo $[9-$cz]`  ; echo "第二個數:開始從 $c2 打印後面 9 個數字"
    c3=`echo $[$c2+9]` ;  echo "第3個數:開始從 $c3 打印後面 9 個數字"
    c4=`echo $[$c3+9]` ;  echo "第4個數:開始從 $c4 打印後面9個數字"
    c5=`echo $[$c4+9]` ;  echo "第5個數:開始從 $c5 打印後面9個數字"
    c6=`echo $[$c5+9]` ;  echo "第6個數:開始從 $c6 打印後面9個數字"
    c7=`echo $[$c6+9]` ;  echo "第7個數:開始從 $c7 打印後面9個數字"
# 定義變量c 為echo 計算的值
    str1=`echo $er | awk '{c1='"c1"'; print substr($0,1,9)}'`  ; echo $str1
    str2=`echo $er | awk '{c2='"c2"'; print substr($0,10,9)}'`  ; echo $str2
    str3=`echo $er | awk '{c3='"c3"'; print substr($0,19,9)}'`  ; echo $str3
    str4=`echo $er | awk '{c4='"c4"'; print substr($0,28,9)}'`  ; echo $str4
    str5=`echo $er | awk '{c5='"c5"'; print substr($0,37,9) }'`  ; echo $str5
    str6=`echo $er | awk '{c6='"$c6"'; print substr($0,46,9)}'` ; echo "測試6:"  $str6
    str7=`echo $er | awk '{c7='"$c7"'; print substr($0,55,9)}'`  ; echo $str7
# 定義變量str 為:打印二進制變量er  然後管道(並且規則)
# awk'{  }' 函數:內部變量c引用外部變量c用符號 '" "'  ; print 打印  substr($0,1,9) 截取範圍字符串,$0所有字符串,1為從1開始,後面的9位數
echo "原始字符 " $er
echo "刪除空格後 " $str1 $str2 $str3 $str4 $str5 $str6 $str7 | sed "s/ //g"
echo "腳本分隔" $str1 $str2 $str3 $str4 $str5 $str6 $str7
a=(
$str1 $str2 $str3 $str4 $str5 $str6 $str7
)
# 定義數組 a 變量,裡面的元素用空格隔開
echo ${a[*]}              # 打印數組 a 的所有元素 [*]  ;  當 [1] 時,為角標 2 ,第二個元素
for i in ${a[*]}           # 定義for 循環  變量 i 是數組裡面的所有元素
 do                           # 開始循環
   ((a=2#$i)) ; echo $a
                                # 將二進制數組元素轉換為 10進制並且打印其值
      b[$c]=`echo $[$a]`
                              # 定義數組b 角標為變量c 由下面的 (c++) 輔助控制,打印數組變量a 的所有元素賦值給數組b
       ((c++))           # c++ 直到數組打印完
 done                     # 結束循環
echo "${b[*]} 總個數為:${#b[*]}"
for((i=0;i<=6;i++)) # 定義for循環,變量i 的值為0 它小等於6的這個範圍,進行自動增加數數
do
   if [ $i -le 3 ]          # 進行判斷,$i 循環次數在3次呢,等於控制數組的前3個元素
      then                 # 條件成立就進行
         b[$i]=`echo ${b[$i]} | awk '{printf("%04d",$0)}'`
                              # 修改數組的元素為 :打印元素${b[$i]} 並且:awk 函數進行格式化字 符串  "%04d" 格式化為4位整數,  $0 所有字符串
         echo "四位出現數:${b[$i]} "
   fi
   if [ $i -ge 4 ]       # 判斷角標大等於 4
       then               # 條件成立就開始:
         b[$i]=`echo ${b[$i]} | awk '{printf("%07d",$0)}'`
                             # 字符串格式化為 7 位整數
      echo "7位出現數:${b[$i]} "
   fi
# 數組格式化為:角標前5位,格式化為4位整數,後5位格式化7位整數
done
echo "解密後的結果為:" ${b[*]} | sed "s/ //g"

Leave a Reply

Your email address will not be published. Required fields are marked *