Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C AES解密失败_C_Aes_Polarssl - Fatal编程技术网

C AES解密失败

C AES解密失败,c,aes,polarssl,C,Aes,Polarssl,我正在尝试对OpenSSLprivate.pem文件执行AES加密/解密操作。我正在使用中的polarssl库进行此操作 我使用以下代码阅读private.pem unsigned char * buffer = 0; long length; FILE * fp = fopen ("private.pem", "rb"); if (fp) { fseek (fp, 0, SEEK_END); length = ftell (fp);

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

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

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

if (fp)
{
    fseek (fp, 0, SEEK_END);
    length = ftell (fp);
    fseek (fp, 0, 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);        
}
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);
#定义AES块大小16
未签名字符私有加密[strlen(缓冲区)];
int j;

对于(j=0;j文本清楚地显示了
AES-128-CBC
作为密码类型和块链方法。那么……你为什么要对ECB做任何事情呢?我没有注意到。我使用OpenSSL生成这个private.pem。但是,不管生成的密钥是AES-128-CBC还是其他格式,我都在private.pe上使用完全不同的AES操作m、 输入文件的格式是否重要?如果我错了,请纠正我。这绝对重要。您所呈现的文件格式似乎是“传统”或“名义”格式OpenSSL加密的RSA私钥。您可以通过找到文件格式。它遵循非常特定的格式,具有非常特定的用途。您不能在PEM编码上随意使用一些加密/解密算法,特别是在这种情况下,IV/salt和密码短语(您甚至没有指定)是至关重要的。也就是说……我对PolarSSL并不熟悉,但如果该社区有人采取必要步骤通过AES-128-CBC(或任何其他加密+链接)解密OpenSSL加密私钥,我一点也不会感到惊讶PEM正在使用他们的工具链。您发布的代码存在明显的问题。加密输入的大小不是16的倍数,因此最后一个块将覆盖输出缓冲区后的几个字节的内存。在这样的内存损坏之后,任何事情都可能发生。不清楚您在
buf_test
中放置了什么,但是它不是以null结尾的字符串:它是二进制数据。因此缓冲区比数据小,并且再次出现内存损坏。代码中没有显示的部分可能存在其他问题。您必须发布完整的代码来重现该问题。