我正在编写自己的列表管理器,我需要一个简单的短 URL 供用户“单击”取消订阅,例如http://unsubscribe.example.com/50d178fa
50d178fa
只是一个时代的十六进制,我想这太容易猜了。一个人可能是恶意的,只是通过正确猜测特定时间段内的十六进制来取消订阅。
所以我正在寻找一些光保护。xor
似乎最简单。使用生成不超过 8 个字符的“不可猜测的字符串”的秘密的任何其他“少吸”建议,我可能会丢失?
epoch=$(date +%s)
hex=$(printf '%x' $epoch)
echo Convert epoch to hex
echo d:$epoch h:$hex
echo h:$hex is ${#hex} characters long
echo Conversion from hex back to epoch
echo h:$hex d:$(printf "%dn" 0x$hex)
n=911 # secret number
obfuscated=$(($epoch ^ $n))
obfuscatedhex=$(printf '%x' $obfuscated)
echo d:$obfuscated, h:$obfuscatedhex is ${#obfuscatedhex} characters long
echo Conversion from hex back to epoch
echo $(($(printf "%dn" 0x$obfuscatedhex) ^ $n))