각 문자와 문자가 특정 값을 갖는 알파벳을 만들고 싶습니다.
예:
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"
이해하기 쉽도록 변수를 추가했습니다.