OpenSSL private.pemファイルで AES 暗号化/復号化操作を実行しようとしています。この操作にはhereの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-----
bufferで 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����˷�%�C���b��s��&�y�k;.����f���Hlength
他に印刷する方法がわかりません。次に、次を使用して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と一致するべきではありませんか? ここで何が間違っていますか?
AES を使用した暗号化/復号化操作にprivate.pemの代わりにプレーンテキストを使用すると、同じコードが機能します。