如何在 bash 中将字符串哈希为数字?

问题描述 投票:0回答:1

我正在尝试创建一条进入专用网络的隧道。我想根据我试图在 9000-9999 之间建立隧道的内部域名创建一个随机但一致的本地主机端口。

这样我就可以在不同的端口上打开多个隧道,但每次每个域名的端口都是相同的。

这是我正在努力解决的一个小问题:

FQDN=example.internal.net
PORT=$(bash -c "RANDOM=$FQDN; echo \$(( 9000 + \$RANDOM % 1000 ))")
kubectl port-forward --namespace default service/example $PORT:433

我遇到的问题是

$RANDOM
似乎要求种子是数字而不是字符串。因此,无论
$FQDN
的值如何,端口始终相同。

因此我想做的是使用某种一致的哈希算法将字符串转换为数字。

FQDN=example.internal.net
SEED=$( ??? )
PORT=$(bash -c "RANDOM=$SEED; echo \$(( 9000 + \$RANDOM % 1000 ))")
kubectl port-forward --namespace default service/example $PORT:433

有谁知道在上面的示例中执行 FQDN -> SEED 的好方法吗?

bash
1个回答
0
投票

您可以像这样使用

cksum

for fqdn in example.com example.org example.net; do
  seed=$(cksum <<<$fqdn) seed=${seed%% *}
  RANDOM=$seed
  port=$((9000 + RANDOM%1000))
  echo "$fqdn, $port"
done

此循环始终打印:

example.com, 9607
example.org, 9215
example.net, 9821
© www.soinside.com 2019 - 2024. All rights reserved.