小编ily*_*lya的帖子

使用C/C++和openssl处理单个AES-128-ECB块

我想使用AES-128-ECB密码对单个16字节数据块进行解码和解码.首先,我通过openssl命令行实用程序使用ASCII 16字符串"a_key_simple_key"作为键,ASCII 16字符串"1234567890uvwxyz"作为消息.命令行实用程序将十六进制字符串"142f 7d9e ad8c 0682 30e0 f165 a52f f789"打印为加密消息,然后将其成功解码回原始消息,如下所示:

$ echo -n "1234567890uvwxyz" | openssl aes-128-ecb -K $(echo -n "a_key_simple_key" | xxd -ps) -nopad | xxd
0000000: 142f 7d9e ad8c 0682 30e0 f165 a52f f789  ./}.....0..e./..
$ echo "142f 7d9e ad8c 0682 30e0 f165 a52f f789" | xxd -r -ps | openssl aes-128-ecb -d -K $(echo -n "a_key_simple_key" | xxd -ps) -nopad 
1234567890uvwxyz
Run Code Online (Sandbox Code Playgroud)

现在我写了一个简短的C++程序,它也应该这样做.它不起作用.有两个问题:

  1. 编码部分的输出是32个字节长而不是16个字节(这32个字节的前半部分正是我期望看到的加密文本)
  2. 解码部分在完成步骤中失败,并显示以下openssl消息:

错误:06065064:数字信封例程:EVP_DecryptFinal_ex:解密错误

我怀疑这两个问题都以某种方式与填充相关联,但我不明白究竟有什么问题以及如何解决它.以下是该计划的完整输出:

$ g++ -Wall -g ssl-aes-128-ecb.c++ -lcrypto -lssl …
Run Code Online (Sandbox Code Playgroud)

c c++ openssl aes ecb

6
推荐指数
1
解决办法
8875
查看次数

标签 统计

aes ×1

c ×1

c++ ×1

ecb ×1

openssl ×1