首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用bash和HMAC创建TOTP

使用bash和HMAC创建TOTP
EN

Stack Overflow用户
提问于 2018-09-20 04:13:52
回答 1查看 290关注 0票数 0

我正在试着写一个能生成6位TOTP的bash代码。我写了以下代码:

代码语言:javascript
复制
##!/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

有时它会起作用,有时我会得到以下错误:

代码语言:javascript
复制
./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")

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-09-20 04:26:29

您正尝试在本应使用$(command substitution)的位置使用$((arithmetic expansion))

而不是

代码语言:javascript
复制
dec=$((echo $(( 16#$keyhex )) ))

使用

代码语言:javascript
复制
dec=$(echo $(( 16#$keyhex )) )

或者更好的是,只需

代码语言:javascript
复制
dec=$(( 16#$keyhex ))

以下是您的脚本,其中包含这些内容和其他一些调整:

代码语言:javascript
复制
#!/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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52413559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档