当前位置:  开发笔记 > 编程语言 > 正文

如何通过命令行获取32位十六进制数字的随机字符串?

如何解决《如何通过命令行获取32位十六进制数字的随机字符串?》经验,为你挑选了4个好方法。

我想把一个打印出一串32个十六进制数字的命令放在一起.我有一个有效的Python脚本:

python -c 'import random ; print "".join(map(lambda t: format(t, "02X"), [random.randrange(256) for x in range(16)]))'

这会生成如下输出:

6EF6B30F9E557F948C402C89002C7C8A 

这就是我需要的.

在Mac上,我甚至可以这样做:

uuidgen | tr -d '-'

但是,我没有访问更复杂的脚本语言ruby和python,我不会在Mac上(所以没有uuidgen).我需要坚持使用更多bash'ish工具,如sed,awk,/ dev/random,因为我在一个有限的平台上.有没有办法做到这一点?



1> Renaud Pacal..:

如果你有hexdump:

hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random

应该做的工作.

说明:

-n 16 消耗16个字节的输入(32个十六进制数字= 16个字节).

4/4 "%08X" 迭代四次,每次迭代消耗4个字节,并将相应的32位值打印为8个十六进制数字,如果需要,使用前导零.

1 "\n" 以单个换行结束.



2> 小智..:

如果您要查找单个命令并安装了openssl,请参见下文。生成随机的16个字节(32个十六进制符号)并以十六进制编码(也支持-base64)。

openssl rand -hex 16



3> 小智..:

我知道有三种方式:

#!/bin/bash

n=16 

# Read n bytes from urandom (in hex):
xxd -l "$n" -p                    /dev/urandom | tr -d " \n" ; echo
od  -vN "$n" -An -tx1             /dev/urandom | tr -d " \n" ; echo
hexdump -vn "$n" -e ' /1 "%02x"'  /dev/urandom ; echo

使用一个,注释掉另外两个.


以我的经验,“ od”是最常见的。MacOS具有“ hexdump”,“ xdd”和“ od”。Git Bash(MinGW)有xxd和od。基于Alpine Linux的Docker映像具有“ od”(当然还有“ tr”)。并且所有三个平台都有`/ dev / urandom`。因此,如果您正在寻找最便携的产品,那就坚持使用od口味。

4> caveman..:

这里有一些选项,所有这些选项都具有很好的特性,可以直接选择输出字符串的长度.在下面的所有情况下,只需将"32"更改为所需的字符串长度即可.

#works in bash and busybox, but not in ksh
tr -dc 'A-F0-9' < /dev/urandom | head -c32

#works in bash and ksh, but not in busybox
tr -dc 'A-F0-9' < /dev/urandom | dd status=none bs=1 count=32

#works in bash, ksh, AND busybox! w00t!
tr -dc 'A-F0-9' < /dev/urandom | dd bs=1 count=32 2>/dev/null

编辑:测试不同的贝壳.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有