Мне был предоставлен пример модуля шифрования, который просто xor-ключ с данными пакета и помещает результат в поле данных самого построенного пакета ....
Код для модуля xoricv здесь.
void
xorcrypto(uint8_t *key, uint32_t keylen,
uint8_t *data, uint32_t datalen)
{
int d, k;
for (d=0, k=0; d < datalen; ++d, k = (k+1)%keylen) {
data[d] ^= key[k];
}
}
Теперь мне нужно изменить модуль, чтобы он выполнял шифрование AES, а не просто операцию xor.
Не могли бы вы предложить возможное преобразование, которое мне нужно сделать ????
Это небольшая часть моего проекта, и я застрял между ..
Команда AES, которую я использовал в командной строке для шифрования
openssl enc -aes-256-cbc-salt -in file.txt -out file.enc
Ежедневно я сталкиваюсь с множеством ошибок, когда пытаюсь реализовать это самостоятельно, и у меня очень мало времени, поэтому, пожалуйста, помогите мне .......
Вот моя реализация ...... хотя я добавляю ее здесь, в столбце ответов, потому что, возможно, в моей реализации есть небольшая ошибка, которую я мог бы решить с помощью некоторых ценныхпредложения, но все же, еслиЛюбой другой способ возможен, пожалуйста, предложите и предоставьте мне некоторый код реализации ...
/* u_int8_t ... etc all are typedefs for uint8_t....etc
so don't bother about them */
void xorcrypto(u_int8_t *key, u_int32_t keylen,u_int8_t *data,
u_int32_t datalen)
{
int ch,i,j;
uint8_t modata[100];
FILE *fp,*fr,*fq,*ft;
fp=fopen("key","w");
fputs((char *)key,fp);
fq=fopen("file.txt","w");
fputs((char *)data,fq);
fclose(fp);
fclose(fq);
system("sudo openssl enc -aes-256-cbc -salt -in file.txt -out file.enc -pass file:key");
fr=fopen("file.enc","r");
memset(data,0,sizeof(data));
i=0;
while( (ch=fgetc(fr))==EOF) {
data[i]=ch;
i++;
}
fclose(fr);
system("sudo openssl enc -d -aes-256-cbc -salt -in file.enc
-out file1.txt -pass file:key");
ft=fopen("file1.txt","r");
memset(modata,0,sizeof(modata));
j=0;
while( (ch=fgetc(ft)) != EOF) {
modata[j]=ch;
j++;
}
fclose(ft);
}
Вызов функции в модуле описывается как -
bool
espcrypto(esp_private *epriv, sendip_data *data, sendip_data *pack)
{
u_int32_t keylen;
u_int8_t *key;
static u_int8_t fakekey;
struct ip_esp_hdr *esp = (struct ip_esp_hdr *)pack->data;
if (!epriv->keylen) { /* This isn't going to be very productive... */
key = &fakekey;
keylen = 1;
} else {
key = (u_int8_t *)epriv->key;
keylen = epriv->keylen;
}
/* Encrypt everything past the ESP header */
xorcrypto(key, keylen,
(u_int8_t *)esp->enc_data,
pack->alloc_len + data->alloc_len -
sizeof(struct ip_esp_hdr));
return TRUE;
}
Это код в xorcrypto.c файл в генераторе пакетов, который я использую, который связан при создании пакета через командную строку как -am xorcrypto.so
. Вот почему я так ленив. Сначала я ищу реализацию, которая может служить доказательством концепции .Restвсе оптимизации могут быть выполнены позже.
Вывод, который я получаю, - шифрование не выполняется вообще, данные все еще находятся в виде простого текста в пакете.
udit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $ cat file.txt
udit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $ cat file.enc
Salted__����
}�#��G�����0����iudit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $ cat file1.txt
udit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $
Почему file.txt имеет значение nullдаже key
файл не обновляется ???
Если понадобится какая-либо другая информация, я добавлю ее сюда ...... но, пожалуйста, помогите мне выбраться из сетки.