-2

私は glibc cbc_crypt 関数を使用して c の文字列を暗号化しようとしています。プログラムは関数と同じくらい移植可能である必要があるため、このライブラリを使用しています

ここに私のコードがあります:

#define _GNU_SOURCE
#include <stdio.h>
#include <crypt.h>
#include <string.h>
#include <rpc/des_crypt.h>

int main(int argc, char *argv[]) {
    int blah=0;
    char plaintext[]="mypass1234test";
    char key[]="aBcDeFg1";
    char encbuff[] = "87654321";
    char decbuff[] = "87645321";
    des_setparity(key);
    int size=sizeof(plaintext);
    printf("plaintext is %s\n",plaintext);
    printf("original size is %d\n",size);
    while (size % 8 && size < 420)
        plaintext[size++]='\0';
    printf("new size is %d\n",size);
    if (argc>1) {
        if (strcmp("encrypt",argv[1])==0) {
            blah=cbc_crypt(key,plaintext,size,DES_ENCRYPT | DES_SW,encbuff);
            printf("ciphertext is %s\n",plaintext);
            size = sizeof(plaintext);
            printf("original size is %d\n",size);
            while (size % 8 && size < 420)
                plaintext[size++]='\0';
            printf("new size is %d\n",size);
            blah=cbc_crypt(key,plaintext,size,DES_DECRYPT | DES_SW,decbuff);
            printf("plaintext is %s\n",plaintext);
        }
    }
    return 0;
}

このプログラムを実行しようとすると、次のようになります。

./a.out encryption
plaintext is mypass1234test
original size is 15
new size is 16
ciphertext is 0ю�sBKX,�7&���8@  @
original size is 15
new size is 16
plaintext is myp`rs12��~�ϖ@ @

私の目標は、ファイルを暗号化し、ファイルを復号化することです。他の暗号化機能を使用することはできますが、このプログラムを移植可能にする必要があります (そのライブラリなしでマシンを実行しているため、openssl を使用したくありません)。

4

2 に答える 2