AES解密失败

问题描述

我正在尝试对OpenSSL private.pem 文件执行AES加密/解密操作。我正在使用here中的polarssl库进行此操作。

我使用以下代码阅读 private.pem

unsigned char * buffer = 0;
long length;
FILE * fp = fopen ("private.pem","rb");

if (fp)
{
    fseek (fp,SEEK_END);
    length = ftell (fp);
    fseek (fp,SEEK_SET);
    buffer = malloc (length);
    if (buffer)
    {
        fread (buffer,1,length,fp);
    }
    fclose (fp);
}
printf("buffer is \n %s\n",buffer);

输出

buffer is 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,440969729B4F3D6AFEF6D2A0ABD1BE50

zRCM0nSfz6hqi/viRhXNT/5X3/i5lZUgePoM+JYzpXSjOrY1DWRKzFfKfOrHUZNx
DqJzcrmll6E/DfFfoQacu+TDyEsQe2kXkByHJKqDEDoG3FZoIMJOssAzjoQ1qseM
cd61c4imktl7MO7wFVb0z+HhqSdc5zOLd9aN25FbQRVXJdROGajQiuLothEfcbrS
OWMNhNKo3FsN1mKhhaJGha5EQnwmcFvc7aslgda0bAMnnvg5o2g3RPXdLlhi7XE6
EdOpqJYVkfUv4zj2/DcMcSqRNixguRez0macMWsYHV00MQrNS7HFILHjb4bhYKUt
Zhey36dh48/fyIrQAheB+2Tyq4qxWnQTF4XLj6Y4B+NYqvcop4+s1ERp574ZMvkZ
oK6LmAgcneYobuuzDYsaZczYxQcM9HYIodVO7Si8RmM/XfwS6Xftt3Rg1TFPWXu8
P4LRj8/AHGd6+Tniky9McGpr/7a79+mr97xbG3hjhayzhQc1uq212jgACDy1m7QF
3evChUQINH0uN8URmhlkXs7ORz1nK0EyVGWYQ0+3GVYyQ7AarqgZIm1xemUb6z33
knwpmjLbdglKg2qQLi/yJdRCCaQr8gJ1QE5GrY7GtE+g09RqxmsT7khIdK8TDbqY
+CRQVyHODZaYf21gNUsVgnyzkAqVndNCU14A7DhzXZBMtROjJGeRCsNwHt4aUSW8
ANdamBNlDRYRXYrxPpqGlK3T4A0xpI/O3Heu/p4K7lCOgX+v7TVvP3dS+dmBSb0P
9XkuMYfmyuEvX63DgaI1K/QLEMyJ0CVzICKaX8vKZ0ervKW+OLfz4VGITp0fsnd3
-----END RSA PRIVATE KEY-----

我正在尝试在缓冲区上执行AES加密操作。为此,我做了以下事情,

#define AES_BLOCK_SIZE 16
unsigned char private_encrypt[strlen(buffer)];
int j;


for(j=0;j<length/AES_BLOCK_SIZE;++j){
    aes_crypt_ecb(&aes,AES_ENCRYPT,buffer+AES_BLOCK_SIZE*j,private_encrypt+AES_BLOCK_SIZE*j);        
}

加密的输出为:

加密的私钥为``xvI'',``8'',``%'',``Cbbs''和``yk''.. ff.H֕

我不知道其他打印方式。然后,我尝试使用以下内容解密 private_encrypt

unsigned char buf_test[strlen(buffer)];
for(j=0;j<length/AES_BLOCK_SIZE;++j){
    aes_crypt_ecb(&aes,AES_DECRYPT,private_encrypt+AES_BLOCK_SIZE*j,buf_test+AES_BLOCK_SIZE*j);
     buf_test+AES_BLOCK_SIZE*j);
}
printf("output buffer is  %s\n",buf_test);

我得到以下输出

输出缓冲区为``Nxړ��f

但是输出结果不应该与原始的 private.pem 相匹配吗?我在这里做错了什么?

如果我使用纯文本而不是 private.pem 来使用AES进行加密/解密操作,则相同的代码也可以工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)