
各文字と文字が特定の値を持つアルファベットを作成したいと思います。
例:
A="99_banana"
a="@_melon"
B="22_GRAPE"
b="orange"
C="Strawberry"
c="life"
@="12399"
!="tv_12"
その他など
スクリプトを実行するとき:
文章エンコーディング:
$ ./Encryptfruits -c "Abc!"
output: 99_bananaorangelifetv_12
文章を解読します:
$ ./Encryptfruits -d "99_bananaorangelifetv_12"
output: Abc!
誰でも例がありますか? Googleで検索しましたが、結果はありません。
-c パラメータ暗号化
-d パラメータの復号化
答え1
これはbashでは簡単ではありませんが、連想配列を使用することで可能です。
#! /bin/bash
declare -A crypt=(
[A]="99_banana"
[a]="@_melon"
[B]="22_GRAPE"
[b]="orange"
[C]="Strawberry"
[c]="life"
['@']="12399"
['!']="tv_12"
)
encode () {
local word=$1
for ((i=0; i<${#word}; ++i)) ; do
local char=${word:$i:1}
printf %s ${crypt[$char]}
done
printf '\n'
}
declare -A decrypt
for char in "${!crypt[@]}" ; do
key=${crypt[$char]}
decrypt[$key]=$char
done
decode () {
local word=$1
while [[ $word ]] ; do
local code
for code in "${!decrypt[@]}"; do
if [[ $word == "$code"* ]] ; then
printf %s "${decrypt[$code]}"
word=${word#"$code"}
fi
done
done
printf '\n'
}
encrypted=$(encode 'Abc!')
decode "$encrypted"
ある文字の暗号化が別の文字暗号化のサブストリングである場合、この操作は中断される可能性があります。
答え2
#! /bin/bash
declare -A crypt=(
[A]="99_banana"
[a]="@_melon"
[B]="22_GRAPE"
[b]="orange"
[C]="Strawberry"
[c]="life"
[' ']="space"
['@']="12399"
['!']="tv_12"
)
encode () {
local word=$1
for ((i=0; i<${#word}; ++i)) ; do
local char=${word:$i:1}
printf %s ${crypt[$char]}
done
printf '\n'
}
declare -A decrypt
for char in "${!crypt[@]}" ; do
key=${crypt[$char]}
decrypt[$key]=$char
done
decode () {
local word=$1
while [[ $word ]] ; do
local code
for code in "${!decrypt[@]}"; do
if [[ $word == "$code"* ]] ; then
printf %s "${decrypt[$code]}"
word=${word#"$code"}
fi
done
done
printf '\n'
}
encrypt=$(encode 'Abc !')
decrypt=$(decode "$encrypt")
echo "$encrypt"
echo "$decrypt"
わかりやすいように変数を追加しました。