知识点:
函数和返回值使用
字符串提取,连接
字符转化为16进制
运算操作
#!/bin/bash
echo start...function char_to_hex()
{
case $1 in
0) return 48;;1) return 49;;2) return 50;;
3) return 51;;4) return 52;;5) return 53;;
6) return 54;;7) return 55;;8) return 56;;
9) return 57;;
a) return 97;; b) return 98;; c) return 99;;
d) return 100;;e) return 101;;f) return 102;;
g) return 103;;h) return 104;;i) return 105;;
j) return 106;;k) return 107;;l) return 108;;
m) return 109;;n) return 110;;o) return 111;;
p) return 112;;q) return 113;;r) return 114;;
s) return 115;;t) return 116;;u) return 117;;
v) return 118;;w) return 119;;x) return 120;;
y) return 121;;z) return 122;;
A) return 65;; B) return 66;;C) return 67;;
D) return 68;; E) return 69;;F) return 70;;
G) return 71;; H) return 72;;I) return 73;;
J) return 74;; K) return 75;;L) return 76;;
M) return 77;; N) return 78;;O) return 79;;
P) return 80;; Q) return 81;;R) return 82;;
S) return 83;; T) return 84;;U) return 85;;
V) return 86;; W) return 87;;X) return 88;;
Y) return 89;; Z) return 90;;
esac
}
function token_generation()
{
#part a:xor process
for((i=0;i<4;i++))
do
tmpa=${uid:11-i:1}
char_to_hex $tmpa
tmpa=$?
#echo $tmpa
tmpb=${pin:0+i:1}
char_to_hex $tmpb
tmpb=$?
#echo $tmpb
tmp=$((($tmpa)^($tmpb)))
#echo $tmp
#convert to hex format
hextmp=`printf "%x" $tmp`
hextmp_len=`expr length $hextmp`
# echo $hextmp_len
if [ $hextmp_len -eq 1 ]
then hextmp="0"${hextmp}
fi
# echo "hextmp=$hextmp"
token=${hextmp}${token}
#echo "token=$token"
done
#part b: conver others
for((i=0;i<8;i++))
do
tmp=${uid:7-i:1}
char_to_hex $tmp
tmp=$?
hextmp=`printf "%x" $tmp`
token=${hextmp}${token}
done
echo "token:$token"
}
if [ $# -ne 2 ]
then
echo "the parameter num error,should be 2"
exit
fi
token=""
#uid="0123456789ab"
#pin="1234"
uid=$1
pin=$2
uid_len=`expr length $uid`
if [ $uid_len -ne 12 ]
then
echo "uid len error, should be 12"
exit
fi
pin_len=`expr length $pin`
if [ $pin_len -ne 4 ]
then
echo "pin len error, should be 4"
exit
fi
token_generation
while [ 1 -eq 1 ]
do
ts=`date +%s`
echo "timestamp:$ts"
# curl -X POST -d 'ON=true' http://192.168.1.131:80/fireplace/power?token=$toke&ts=$ts
sleep 1;
# curl -X POST -d 'ON=false' http://192.168.1.131:80/fireplace/power?token=$toke&ts=$ts
# sleep 1;
done
echo end...