improved rotations, and adding drote (decode rote)

thanks to ai
This commit is contained in:
committer@tuxwarrior
2026-05-20 14:55:40 -05:00
parent 66cc1a396f
commit a3fa1e92a6
+49 -119
View File
@@ -245,111 +245,30 @@ function decimal_to_base36(){
done && echo
}
# loops every 36, so that 36 becomes 1, etc
decimal_to_base36_wrap() {
local n=$(( $1 % 36 ))
decimal_to_base36 $n
}
rot() {
if [[ -n $1 ]] && [[ -n $2 ]] ; then
if [[ $1 == "1" ]] ; then
echo "$2" | tr 'a-z' 'b-za'
elif [[ $1 == "-1" ]] ; then
echo "$2" | tr 'b-za' 'a-z'
elif [[ $1 == "2" ]] ; then
echo "$2" | tr 'a-z' 'c-zab'
elif [[ $1 == "-2" ]] ; then
echo "$2" | tr 'c-zab' 'a-z'
elif [[ $1 == "3" ]] ; then
echo "$2" | tr 'a-z' 'd-zabc'
elif [[ $1 == "-3" ]] ; then
echo "$2" | tr 'd-zabc' 'a-z'
elif [[ $1 == "4" ]] ; then
echo "$2" | tr 'a-z' 'e-zabcd'
elif [[ $1 == "-4" ]] ; then
echo "$2" | tr 'e-zabcd' 'a-z'
elif [[ $1 == "5" ]] ; then
echo "$2" | tr 'a-z' 'f-zabcde'
elif [[ $1 == "-5" ]] ; then
echo "$2" | tr 'f-zabcde' 'a-z'
elif [[ $1 == "6" ]] ; then
echo "$2" | tr 'a-z' 'g-zabcdef'
elif [[ $1 == "-6" ]] ; then
echo "$2" | tr 'g-zabcdef' 'a-z'
elif [[ $1 == "7" ]] ; then
echo "$2" | tr 'a-z' 'h-zabcdefg'
elif [[ $1 == "-7" ]] ; then
echo "$2" | tr 'h-zabcdefg' 'a-z'
elif [[ $1 == "8" ]] ; then
echo "$2" | tr 'a-z' 'i-zabcdefgh'
elif [[ $1 == "-8" ]] ; then
echo "$2" | tr 'i-zabcdefgh' 'a-z'
elif [[ $1 == "9" ]] ; then
echo "$2" | tr 'a-z' 'j-zabcdefghi'
elif [[ $1 == "-9" ]] ; then
echo "$2" | tr 'j-zabcdefghi' 'a-z'
elif [[ $1 == "10" ]] ; then
echo "$2" | tr 'a-z' 'k-zabcdefghij'
elif [[ $1 == "-10" ]] ; then
echo "$2" | tr 'k-zabcdefghij' 'a-z'
elif [[ $1 == "11" ]] ; then
echo "$2" | tr 'a-z' 'l-zabcdefghijk'
elif [[ $1 == "-11" ]] ; then
echo "$2" | tr 'l-zabcdefghijk' 'a-z'
elif [[ $1 == "12" ]] ; then
echo "$2" | tr 'a-z' 'm-zabcdefghijkl'
elif [[ $1 == "-12" ]] ; then
echo "$2" | tr 'm-zabcdefghijkl' 'a-z'
elif [[ $1 == "13" ]] ; then
echo "$2" | tr 'a-z' 'n-zabcdefghijklm'
elif [[ $1 == "-13" ]] ; then
echo "$2" | tr 'n-zabcdefghijklm' 'a-z'
elif [[ $1 == "14" ]] ; then
echo "$2" | tr 'a-z' 'o-zabcdefghijklmn'
elif [[ $1 == "-14" ]] ; then
echo "$2" | tr 'o-zabcdefghijklmn' 'a-z'
elif [[ $1 == "15" ]] ; then
echo "$2" | tr 'a-z' 'p-zabcdefghijklmno'
elif [[ $1 == "-15" ]] ; then
echo "$2" | tr 'p-zabcdefghijklmno' 'a-z'
elif [[ $1 == "16" ]] ; then
echo "$2" | tr 'a-z' 'q-zabcdefghijklmnop'
elif [[ $1 == "-16" ]] ; then
echo "$2" | tr 'q-zabcdefghijklmnop' 'a-z'
elif [[ $1 == "17" ]] ; then
echo "$2" | tr 'a-z' 'r-zabcdefghijklmnopq'
elif [[ $1 == "-17" ]] ; then
echo "$2" | tr 'r-zabcdefghijklmnopq' 'a-z'
elif [[ $1 == "18" ]] ; then
echo "$2" | tr 'a-z' 's-zabcdefghijklmnopqr'
elif [[ $1 == "-18" ]] ; then
echo "$2" | tr 's-zabcdefghijklmnopqr' 'a-z'
elif [[ $1 == "19" ]] ; then
echo "$2" | tr 'a-z' 't-zabcdefghijklmnopqrs'
elif [[ $1 == "-19" ]] ; then
echo "$2" | tr 't-zabcdefghijklmnopqrs' 'a-z'
elif [[ $1 == "20" ]] ; then
echo "$2" | tr 'a-z' 'u-zabcdefghijklmnopqrst'
elif [[ $1 == "-20" ]] ; then
echo "$2" | tr 'u-zabcdefghijklmnopqrst' 'a-z'
elif [[ $1 == "21" ]] ; then
echo "$2" | tr 'a-z' 'v-zabcdefghijklmnopqrstu'
elif [[ $1 == "-21" ]] ; then
echo "$2" | tr 'v-zabcdefghijklmnopqrstu' 'a-z'
elif [[ $1 == "22" ]] ; then
echo "$2" | tr 'a-z' 'w-zabcdefghijklmnopqrstuv'
elif [[ $1 == "-22" ]] ; then
echo "$2" | tr 'w-zabcdefghijklmnopqrstuv' 'a-z'
elif [[ $1 == "23" ]] ; then
echo "$2" | tr 'a-z' 'x-zabcdefghijklmnopqrstuvw'
elif [[ $1 == "-23" ]] ; then
echo "$2" | tr 'x-zabcdefghijklmnopqrstuvw' 'a-z'
elif [[ $1 == "24" ]] ; then
echo "$2" | tr 'a-z' 'y-zabcdefghijklmnopqrstuvwx'
elif [[ $1 == "-24" ]] ; then
echo "$2" | tr 'y-zabcdefghijklmnopqrstuvwx' 'a-z'
elif [[ $1 == "25" ]] ; then
echo "$2" | tr 'a-z' 'z-zabcdefghijklmnopqrstuvwxy'
elif [[ $1 == "-25" ]] ; then
echo "$2" | tr 'z-zabcdefghijklmnopqrstuvwxy' 'a-z'
local shift=$1
local text=$2
local alpha=abcdefghijklmnopqrstuvwxyz
local n
if [[ -z $shift || -z $text ]]; then
echo "Usage: rot <shift> <text>"
return 1
fi
fi
# Normalize shift to 0-25
n=$(( (shift % 26 + 26) % 26 ))
# Generate rotated alphabet
local rotated="${alpha:n}${alpha:0:n}"
echo "$text" | tr "a-z" "$rotated"
}
rotl() {
@@ -376,42 +295,53 @@ rotl() {
}
rote() {
rote36 $1
}
rote10() {
if [[ -n $1 ]] ; then
datestamp=$(date +%y%m%d)_
rotl=$(rotl $1 0)
# ${param/pattern/replacement}
rotl="${rotl/./}"
emailaddress=$datestamp$rotl"@reduxmail.com"
echo $emailaddress
fi
input="${1//./}"
rote36 "$input"
}
rote36() {
if [[ -n $1 ]] ; then
# datestamp as base 36
datestamp=$(date +%y%m%d)_
year=$(decimal_to_base36 $(date +%y))
year=$(decimal_to_base36_wrap $(date +%y))
month=$(decimal_to_base36 $(date +%m))
day=$(decimal_to_base36 $(date +%d))
datestamp=${year}${month}${day}_
datestamp=`echo "${datestamp}" | tr '[A-Z]' '[a-z]'`
rotl=$(rotl $1 0)
# ${param/pattern/replacement}
rotl="${rotl/./}"
emailaddress=$datestamp$rotl"@reduxmail.com"
echo $emailaddress
fi
}
drote() {
local email="$1"
# Extract base36 date and encoded string
local base36date="${email%%_*}"
local rest="${email#*_}"
rest="${rest%@reduxmail.com}"
# Decode base36 date
local year36="${base36date:0:1}"
local month36="${base36date:1:1}"
local day36="${base36date:2:1}"
local year=$(echo "ibase=36; ${year36^^}" | bc)
local month=$(echo "ibase=36; ${month36^^}" | bc)
local day=$(echo "ibase=36; ${day36^^}" | bc)
# Decode the rest using rotl with shift 0 (reverse of rotl 0 is itself)
# If you have a function to reverse the encoding, use it here.
# For now, let's assume rotl 0 is a simple rot13 (as in your example)
local decoded=$(echo "$rest" | tr 'a-z' 'n-za-m')
printf "%02d%02d%02d: %s\n" "$year" "$month" "$day" "$decoded"
}
# ---
# searching