如何在Openssl中以十六进制生成输出?

时间:2016-06-28 17:27:36

标签: encryption openssl aes

最后,我可以使用“-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

1 个答案:

答案 0 :(得分:9)

Q1。不,openssl enc不能以十六进制输出,只能输出二进制/原始或base64。但是你显然有xxd可用,其主要目的是将其转换为十六进制,然后将其转换为,然后cut -c10-50删除最左边的地址和最右边的可打印ASCII部分以获得您显示的确切格式{{ 1}};或者xxxx xxxx etc确实“平常”。 xxd -pxxxxxxxx一步完成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