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