最后,我可以使用“-a”开关获得base64格式的输出;我可以使用任何十六进制开关吗?
echo '0: 63616e746765747468697332776f726b' | xxd -r | openssl enc -aes-128-ecb -a -K 00000000000000000000000000000000
如果我运行该代码,我会得到这个:
N2+bVLU8fIS7ucFW1Qr/xwFD22PuZrDN/59pkXaAFR4=
......不知怎的,它也是错的,因为它应该只是这个:
N2+bVLU8fIS7ucFW1Qr/xw==
无论如何,我只需要能够提出这个输出:
376f 9b54 b53c 7c84 bbb9 c156 d50a ffc7
答案 0 :(得分:9)
Q1。不,openssl enc
不能以十六进制输出,只能输出二进制/原始或base64。但是你显然有xxd
可用,其主要目的是将其转换为十六进制,然后将其转换为,然后cut -c10-50
删除最左边的地址和最右边的可打印ASCII部分以获得您显示的确切格式{{ 1}};或者xxxx xxxx etc
确实“平常”。 xxd -p
或xxxxxxxx
一步完成od -An -tx1
。
Q2。您正在获得(base64编码)两个密文块,因为具有非流密码的xx xx xx xx etc
默认为PKCS#5填充,并且您的明文正好是一个块(AES为16个字节)。 添加enc
以获取您要求的输出。
由于您似乎无法在不同时间提取两个概念并将它们组合在一起,因此这里的整个事物在一个地方依次:
问题:您输入为十六进制并希望以十六进制输出,但-nopad
以二进制(非十六进制)输入并以二进制或base64(但不是十六进制)生成输出。
DEDUCTION:您必须将输入从十六进制转换为二进制。您还必须将输出从二进制转换为十六进制。虽然这两个都包括“十六进制”字样。和二元',这些是不同的东西。
第1步:将输入从十六进制转换为二进制,因为你有十六进制并需要二进制输入openssl enc
enc
步骤2:从二进制到二进制加密(无填充)
echo 0: 63616e746765747468697332776f726b | xxd -r
步骤省略:请勿使用 openssl enc -aes-128-ecb -nopad -K 00000000000000000000000000000000
转换为base64。 你不想要base64。
第3步:将二进制转换为十六进制,因为你有二进制但需要十六进制
-a
TOTAL(使用$的最小shell提示符,你的可能会有所不同):
xxd -p
这是你要求的结果,除了没有间距,你后来说你不需要。
如果您确实希望间距使用$ echo 0: 63616e746765747468697332776f726b | xxd -r \
| openssl enc -aes-128-ecb -nopad -K 00000000000000000000000000000000 | xxd -p
376f9b54b53c7c84bbb9c156d50affc7
$
而不使用xxd
,并按我原先的说法添加-p
:
cut