Извращения на bash

На этот раз рашил написать шифрование текста.

Возьмем за основу то, что нам нужно будет закодировать текст английскими символами.

Нужно будет каждый символ заменять 4-мя символами. Хмм.. А какими? Будем генерить ключ, с помощью которого можно будет зашифровать и расшифровать текст.

И так, в итоге полчился вот такой скриптик:

kay=$1
q="$(echo $kay | cut -c 1-4)"
w="$(echo $kay | cut -c 5-8)"
e="$(echo $kay | cut -c 9-12)"
r="$(echo $kay | cut -c 13-16)"
t="$(echo $kay | cut -c 17-20)"
y="$(echo $kay | cut -c 21-24)"
u="$(echo $kay | cut -c 25-28)"
i="$(echo $kay | cut -c 29-32)"
o="$(echo $kay | cut -c 33-36)"
p="$(echo $kay | cut -c 37-40)"
a="$(echo $kay | cut -c 41-44)"
s="$(echo $kay | cut -c 45-48)"
d="$(echo $kay | cut -c 49-52)"
f="$(echo $kay | cut -c 53-56)"
g="$(echo $kay | cut -c 57-60)"
h="$(echo $kay | cut -c 61-64)"
j="$(echo $kay | cut -c 65-68)"
k="$(echo $kay | cut -c 69-72)"
l="$(echo $kay | cut -c 73-76)"
z="$(echo $kay | cut -c 77-80)"
x="$(echo $kay | cut -c 81-84)"
c="$(echo $kay | cut -c 85-88)"
v="$(echo $kay | cut -c 89-92)"
b="$(echo $kay | cut -c 93-96)"
n="$(echo $kay | cut -c 97-100)"
m="$(echo $kay | cut -c 101-104)"
i1="$(echo $kay | cut -c 105-108)"
i2="$(echo $kay | cut -c 109-112)"
i3="$(echo $kay | cut -c 113-116)"
i4="$(echo $kay | cut -c 117-120)"
i5="$(echo $kay | cut -c 121-124)"
i6="$(echo $kay | cut -c 125-128)"
i7="$(echo $kay | cut -c 129-132)"
i8="$(echo $kay | cut -c 133-136)"
i9="$(echo $kay | cut -c 137-140)"
i0="$(echo $kay | cut -c 141-144)"
Q="$(echo $kay | cut -c 145-148)"
W="$(echo $kay | cut -c 149-152)"
E="$(echo $kay | cut -c 153-156)"
R="$(echo $kay | cut -c 157-160)"
T="$(echo $kay | cut -c 161-164)"
Y="$(echo $kay | cut -c 165-168)"
U="$(echo $kay | cut -c 169-172)"
I="$(echo $kay | cut -c 173-176)"
O="$(echo $kay | cut -c 177-180)"
P="$(echo $kay | cut -c 181-184)"
A="$(echo $kay | cut -c 185-188)"
S="$(echo $kay | cut -c 189-192)"
D="$(echo $kay | cut -c 193-196)"
F="$(echo $kay | cut -c 197-200)"
G="$(echo $kay | cut -c 201-204)"
H="$(echo $kay | cut -c 205-208)"
J="$(echo $kay | cut -c 209-212)"
K="$(echo $kay | cut -c 213-216)"
L="$(echo $kay | cut -c 217-220)"
Z="$(echo $kay | cut -c 221-224)"
X="$(echo $kay | cut -c 225-228)"
C="$(echo $kay | cut -c 229-232)"
V="$(echo $kay | cut -c 233-236)"
B="$(echo $kay | cut -c 237-240)"
N="$(echo $kay | cut -c 241-244)"
M="$(echo $kay | cut -c 245-248)"
SPACE="$(echo $kay | cut -c 249-252)"
DOT="$(echo $kay | cut -c 253-256)"
SLUSH="$(echo $kay | cut -c 257-260)"
COLON="$(echo $kay | cut -c 261-264)"
DASH="$(echo $kay | cut -c 265-268)"
TOUCH="$(echo $kay | cut -c 269-272)"
DOG="$(echo $kay | cut -c 273-276)"
RES=$(sed "s/q/${q}/g;s/w/${w}/g;s/e/${e}/g;s/r/${r}/g;s/t/${t}/g;s/y/${y}/g;s/u/${u}/g;s/i/${i}/g;s/o/${o}/g;s/p/${p}/g;s/a/${a}/g;s/s/${s}/g;s/d/${d}/g;s/f/${f}/g;s/g/${g}/g;s/h/${h}/g;s/j/${j}/g;s/k/${k}/g;s/l/${l}/g;s/z/${z}/g;s/x/${x}/g;s/c/${c}/g;s/v/${v}/g;s/b/${b}/g;s/n/${n}/g;s/m/${m}/g;s/1/${i1}/g;s/2/${i2}/g;s/3/${i3}/g;s/4/${i4}/g;s/5/${i5}/g;s/6/${i6}/g;s/7/${i7}/g;s/8/${i8}/g;s/9/${i9}/g;s/0/${i0}/g;s/Q/${Q}/g;s/W/${W}/g;s/E/${E}/g;s/R/${R}/g;s/T/${T}/g;s/Y/${Y}/g;s/U/${U}/g;s/I/${I}/g;s/O/${O}/g;s/P/${P}/g;s/A/${A}/g;s/S/${S}/g;s/D/${D}/g;s/F/${F}/g;s/G/${G}/g;s/H/${H}/g;s/J/${J}/g;s/K/${K}/g;s/L/${L}/g;s/Z/${Z}/g;s/X/${X}/g;s/C/${C}/g;s/V/${V}/g;s/B/${B}/g;s/N/${N}/g;s/M/${M}/g;s/ /${SPACE}/g;s/\//${SLUSH}/g;s/\-/${COLON}/g;s/\:/${DOT}/g;s/\-/${DASH}/g;s/\./${TOUCH}/g;s/\@/${DOG}/g;s/\\n/${ENTER}/g" text.txt)
echo $RES > text.txt
echo "Coded..."

Как видно, ключ должен быть из 276-ти символов так как мы взяли заменять символы Aa…Zz, пробел, точку, тире, слеш и другие. Замена происходит командой sed и перезаписывает файл с текстом.
Текст должен быть в файлике text.txt

Генерим ключ вот таким скриптиком:

KAY=$( cat /dev/urandom | tr -d -c '0-9a-zA-Z' | fold -w 276 | head -1)
echo "$KAY"

Или простой командой:

cat /dev/urandom | tr -d -c '0-9a-zA-Z' | fold -w 278 | head -1

Давайте проверим!

Запишем в файлик text.txt простой текст:

hello world

Сгенерим ключик:

>>># ./kay.sh 1
7N79hMYNndo3dA4tMFW5Ij3vNVE2EJhAjY2t7OYggk5xIKlMWMweIp61BxhXHybJNcMYQx749pYSgbs0k5TdFVditTTTspJDjkd6lAQPRQBYWV7jny2Lk7YeXqNFyGgDnNinCziDgGqzOxwVTHjCKGa5sBz1k60gsnQQeExRE5VrHJYNDtxs8fluiWRh8PTjj4vDpZUVXFxxOtathwJNIDTgJXuvz2m3scVS2TAEJTTpFSmx9ju78rPXRBoIt5syQnDKryNMveyKG8rN4nCZ

И закодируем текст командой:

>>># ./code.sh 7N79hMYNndo3dA4tMFW5Ij3vNVE2EJhAjY2t7OYggk5xIKlMWMweIp61BxhXHybJNcMYQx749pYSgbs0k5TdFVditTTTspJDjkd6lAQPRQBYWV7jny2Lk7YeXqNFyGgDnNinCziDgGqzOxwVTHjCKGa5sBz1k60gsnQQeExRE5VrHJYNDtxs8fluiWRh8PTjj4vDpZUVXFxxOtathwJNIDTgJXuvz2m3scVS2TAEJTTpFSmx9ju78rPXRBoIt5syQnDKryNMveyKG8rN4nCZ
Coded...

Теперь содержимое файла поменялось на следуюющее:

OtatysphwJ9ju7j4vDhwJ9ju7jkdyscJTTpSFxxgj4vDIDTgscJTTpSFxxa58rPXwe9ju7pz2m3UJTTpJTTpdi8rPXeExReExRIDTgscJTTpSFxxa5JTTpn9ju7injtny2JscJTTpSuvgscJTTpSFxxqzpeExR8PTjgscJTTpSFxxqzpeExR8PTj9ju7pz2m3UJTTpJTTpdi8rPXeExReExRIDTgscJTTpSFxxa5JTTpn9ju7injtRBoIOtatysphwJ9ju7j4vDhwJ9ju78rPXeExR9ju79ju7pz2m3UJTTpJTTpdi8rPXeExReExRIDTgscJTTpSFxxa5JTTpn9ju7injtIDTgscJTTpSFxxa58rPXweiWRhkn9ju7ineExRe8rPXpz2m3UJTTpIDTgscJTTpSFxxa5scJTTpSq9ju7pz2m3UJTTpgscJTTpSFxxqzpeExR8PTjIDTgscJTTpSFxxa58rPXwe

Интересно) Теперь как же раскодировать?
А на помощь нам придет вот такой скрипт, который по тому же принципу и будет расшифровывать:

#!/bin/bash
count=13

while [ $count -gt 0 ]
do

kay=$1
q="$(echo $kay | cut -c 1-4)"
w="$(echo $kay | cut -c 5-8)"
e="$(echo $kay | cut -c 9-12)"
r="$(echo $kay | cut -c 13-16)"
t="$(echo $kay | cut -c 17-20)"
y="$(echo $kay | cut -c 21-24)"
u="$(echo $kay | cut -c 25-28)"
i="$(echo $kay | cut -c 29-32)"
o="$(echo $kay | cut -c 33-36)"
p="$(echo $kay | cut -c 37-40)"
a="$(echo $kay | cut -c 41-44)"
s="$(echo $kay | cut -c 45-48)"
d="$(echo $kay | cut -c 49-52)"
f="$(echo $kay | cut -c 53-56)"
g="$(echo $kay | cut -c 57-60)"
h="$(echo $kay | cut -c 61-64)"
j="$(echo $kay | cut -c 65-68)"
k="$(echo $kay | cut -c 69-72)"
l="$(echo $kay | cut -c 73-76)"
z="$(echo $kay | cut -c 77-80)"
x="$(echo $kay | cut -c 81-84)"
c="$(echo $kay | cut -c 85-88)"
v="$(echo $kay | cut -c 89-92)"
b="$(echo $kay | cut -c 93-96)"
n="$(echo $kay | cut -c 97-100)"
m="$(echo $kay | cut -c 101-104)"
i1="$(echo $kay | cut -c 105-108)"
i2="$(echo $kay | cut -c 109-112)"
i3="$(echo $kay | cut -c 113-116)"
i4="$(echo $kay | cut -c 117-120)"
i5="$(echo $kay | cut -c 121-124)"
i6="$(echo $kay | cut -c 125-128)"
i7="$(echo $kay | cut -c 129-132)"
i8="$(echo $kay | cut -c 133-136)"
i9="$(echo $kay | cut -c 137-140)"
i0="$(echo $kay | cut -c 141-144)"
Q="$(echo $kay | cut -c 145-148)"
W="$(echo $kay | cut -c 149-152)"
E="$(echo $kay | cut -c 153-156)"
R="$(echo $kay | cut -c 157-160)"
T="$(echo $kay | cut -c 161-164)"
Y="$(echo $kay | cut -c 165-168)"
U="$(echo $kay | cut -c 169-172)"
I="$(echo $kay | cut -c 173-176)"
O="$(echo $kay | cut -c 177-180)"
P="$(echo $kay | cut -c 181-184)"
A="$(echo $kay | cut -c 185-188)"
S="$(echo $kay | cut -c 189-192)"
D="$(echo $kay | cut -c 193-196)"
F="$(echo $kay | cut -c 197-200)"
G="$(echo $kay | cut -c 201-204)"
H="$(echo $kay | cut -c 205-208)"
J="$(echo $kay | cut -c 209-212)"
K="$(echo $kay | cut -c 213-216)"
L="$(echo $kay | cut -c 217-220)"
Z="$(echo $kay | cut -c 221-224)"
X="$(echo $kay | cut -c 225-228)"
C="$(echo $kay | cut -c 229-232)"
V="$(echo $kay | cut -c 233-236)"
B="$(echo $kay | cut -c 237-240)"
N="$(echo $kay | cut -c 241-244)"
M="$(echo $kay | cut -c 245-248)"
SPACE="$(echo $kay | cut -c 249-252)"
DOT="$(echo $kay | cut -c 253-256)"
SLUSH="$(echo $kay | cut -c 257-260)"
COLON="$(echo $kay | cut -c 261-264)"
DASH="$(echo $kay | cut -c 265-268)"
TOUCH="$(echo $kay | cut -c 269-272)"
DOG="$(echo $kay | cut -c 273-276)"
RES=$(sed "s/${q}/q/g;s/${w}/w/g;s/${e}/e/g;s/${r}/r/g;s/${t}/t/g;s/${y}/y/g;s/${u}/u/g;s/${i}/i/g;s/${o}/o/g;s/${p}/p/g;s/${a}/a/g;s/${s}/s/g;s/${d}/d/g;s/${f}/f/g;s/${g}/g/g;s/${h}/h/g;s/${j}/j/g;s/${k}/k/g;s/${l}/l/g;s/${z}/z/g;s/${x}/x/g;s/${c}/c/g;s/${v}/v/g;s/${b}/b/g;s/${n}/n/g;s/${m}/m/g;s/${i1}/1/g;s/${i2}/2/g;s/${i3}/3/g;s/${i4}/4/g;s/${i5}/5/g;s/${i6}/6/g;s/${i7}/7/g;s/${i8}/8/g;s/${i9}/9/g;s/${i0}/0/g;s/${Q}/Q/g;s/${W}/W/g;s/${E}/E/g;s/${R}/R/g;s/${T}/T/g;s/${Y}/Y/g;s/${U}/U/g;s/${I}/I/g;s/${O}/O/g;s/${P}/P/g;s/${A}/A/g;s/${S}/S/g;s/${D}/D/g;s/${F}/F/g;s/${G}/G/g;s/${H}/H/g;s/${J}/J/g;s/${K}/K/g;s/${L}/L/g;s/${Z}/Z/g;s/${X}/X/g;s/${C}/C/g;s/${V}/V/g;s/${B}/B/g;s/${N}/N/g;s/${M}/M/g;s/${SPACE}/\ /g;s/${SLUSH}/\//g;s/${COLON}/\-/g;s/${DOT}/\:/g;s/${DASH}/\-/g;s/${TOUCH}/\./g;s/${DOG}/\@/g;s/${ENTER}/\\n/g" text.txt)
echo $RES > text.txt

(( count-- ))
done ; echo -e " \n "; cat text.txt

Что ж, попробуем раскодировать. Запускаем скрипт раскодировки с тем же ключем, с которым и кодировали:

>>># ./recode.sh 7N79hMYNndo3dA4tMFW5Ij3vNVE2EJhAjY2t7OYggk5xIKlMWMweIp61BxhXHybJNcMYQx749pYSgbs0k5TdFVditTTTspJDjkd6lAQPRQBYWV7jny2Lk7YeXqNFyGgDnNinCziDgGqzOxwVTHjCKGa5sBz1k60gsnQQeExRE5VrHJYNDtxs8fluiWRh8PTjj4vDpZUVXFxxOtathwJNIDTgJXuvz2m3scVS2TAEJTTpFSmx9ju78rPXRBoIt5syQnDKryNMveyKG8rN4nCZ

Теперь содержимое файла вернулось в то состояние, которое было раньше:

hello world

По такому же принципу написал это на PHP. Посмотреть можно тут .

Вот и всё. Всем удачи 🙂