AES cryption quellcode

#c

#c

Вопрос:

Мне нужна небольшая, например, состоящая из двух частей, версия шифрования AES. Я погуглил и нашел AES — Advanced Encryption Standard (исходный код), но код, похоже, написан для Windows, и мне нужен многоплатформенный.

Существует ли какая-либо другая известная небольшая версия шифрования AES или исправление для используемых функций, которые, по-видимому, неизвестны в Linux?

Мой компилятор говорит, что это неизвестные функции:

 ./aes/AES.cpp:198:17: error: ‘_rotl’ was not declared in this scope
./aes/AES.cpp:608:20: error: ‘_rotr’ was not declared in this scope
  

Я также получил:

 ./aes/AES.cpp:764:34: error: ‘memset’ was not declared in this scope
./aes/AES.cpp:770:36: error: ‘memcpy’ was not declared in this scope
  

Как должно быть известно, учитывая, что они включают:

 #include "AES.hpp"
#include <assert.h>
#include <stdio.h>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <iostream>
  

Комментарии:

1. Вам нужно включить <cstring> , чтобы получить memset и memcpy .

2. Вам просто нужно заменить встроенные функции rotate либо кодом C, либо подходящей заменой для вашей платформы.

3. сначала решите проблему управления ключами : blogs.msdn.com/b/ericlippert/archive/2011/09/27 /…

Ответ №1:

Используйте хорошо протестированную криптографическую библиотеку, такую как cryptlib или OpenSSL, вместо некоторых случайных фрагментов, найденных на 40-й странице результатов поиска. В зависимости от того, что вы делаете, вам, вероятно, также следует использовать конструкции более высокого уровня, а не AES напрямую.

Комментарии:

1. ну, мне просто нужно немного шифрования, ничего особенного. Ничего действительно серьезного. Это всего лишь небольшой проект, который я делаю, чтобы оставаться в форме. Поэтому я предпочитаю что-то маленькое, даже если это может быть не так хорошо.

2. Даже если это действительно просто для того, чтобы «оставаться в форме», и вы никогда не расскажете об этом никому другому, вы все равно не делаете себе одолжения, делая что-то наполовину такое. Если вам нужна быстрая и небольшая библиотека, ознакомьтесь libmcrypt или что-то в этом роде.

Ответ №2:

Эталонную реализацию для AES можно найти здесь: http://www.efgh.com/software/rijndael.htm . Основной исходный файл включает только <stdio.h> , но это даже не зависит от этого; у вас не должно возникнуть абсолютно никаких проблем с его использованием на любой платформе.

Ответ №3:

поскольку эта ошибка часто встречается в поиске Google для этой ошибки, вот что я сделал для своей программы, которая отказывалась компилироваться в системе CentOS x64, в которой отсутствует ia32intrin.h:

 #if !defined(_rotr) amp;amp; (defined(__i386__) || defined(__x86_64__))
static inline unsigned int _rotr(unsigned int n, const int count) {
 asm volatile (
  "rorl %1, %0;"
  : "=r" (n)
  : "nI" (count), "0" (n)
 );
 return n;
}
#endif
  

как упоминал авакар, вам необходимо включить cstring или, альтернативно, string.h, чтобы получить memset и memcpy.

код для _rotl будет идентичным, за исключением мнемонического кода операции, который будет roll .