Создание TOTP с использованием Bash и HMAC - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь написать bash-код, который генерирует 6-значные TOTP.Я написал следующий код:

##!/bin/bash
T=`date '+%Y%m%d%H%M'`
K="secret"
prefix="(stdin)= "
keyhex=$(echo -n $T | openssl dgst -sha1 -hmac $K | sed -e "s/^$prefix//")
dec=$((echo $(( 16#$keyhex )) ))
key=$((echo $(($dec % 1000000))))
echo $key

Иногда это работает, а иногда я получаю следующую ошибку:

./auth.sh: line 6: echo 4076818289415231324 : syntax error in expression (error token is "4076818289415231324 ")
./auth.sh: line 7: % 1000000: syntax error: operand expected (error token is "% 1000000")

Что я делаю не так?

1 Ответ

0 голосов
/ 19 сентября 2018

Вы пытаетесь использовать $((arithmetic expansion)) там, где вы должны использовать $(command substitution):

Вместо

dec=$((echo $(( 16#$keyhex )) ))

использовать

dec=$(echo $(( 16#$keyhex )) )

или даже лучшеПросто

dec=$(( 16#$keyhex ))

Вот ваш скрипт с этими и несколькими другими хитростями:

#!/bin/bash
T=$(date '+%Y%m%d%H%M')
K="secret"
prefix="(stdin)= "
keyhex=$(printf '%s' "$K" | openssl dgst -sha1 -hmac $K | sed -e "s/^$prefix//")
dec=$(( 16#$keyhex ))
key=$((dec % 1000000))
echo "$key"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...