PureBasic

AESEncoder()

Синтаксис

Result = AESEncoder(*Input , *Output , Size , *Key , Bits , *InitializationVector [, Mode])

Описание


Кодирует данные из указанного входного буфера "*Input" с помощью алгоритма AES и помещает их в выходной буфер "*Output".

Параметры

*Input Входной буфер с простыми данными.
*Output Выходной буфер, в который будут отправлены закодированные данные. Входной и выходной буферы должны быть различными.
Size Количество байтов, для кодирования. Это значение, должны быть по крайней мере 16 байтов. Чтобы закодировать что-то меньшее, к данным должно быть добавлено дополнение перед кодированием.
*Key Буфер, содержащий ключ для кодирования. Его размер зависит от параметра 'Bits': 16 байтов для 128-разрядного шифрования, 24 байта для 192 битов и 32 байта для 256-разрядного.
Bits Размер ключа используемый при шифровании. Допустимыми значениями являются 128, 192 и 256.
*InitializationVector Вектор инициализации - это блок случайных данных, используемый для инициализации шифрования (для модификации ключевой последовательности), чтобы избежать уязвимостей в декодировании (требуется только при использовании режима #PB_Cipher_CBC). Его размер всегда - 16-байтов long типа.
Mode (дополн.) Этот параметр может быть одним из следующих значений:
  #PB_Cipher_CBC: Режим кодирования по умолчанию (Cipher Block Chaining). Требует '*InitializationVector'.
            Рекомендуется как более надёжный, чем режим ECB mode.
  #PB_Cipher_ECB: Альтернативный режим (Electronic CodeBook, электронная книга кодов). 
          Он не использует ни случайное значение, ни сцепление шифрующихся блоков
          (каждый блок шифруется независимо), что делает его менее сильным, чем CBC.
          И он не должен использоваться для серьезного шифрования.

Возвращаемое значение

Возвращает не нулевое значение, если кодирование было успешным, в противном случае 0.

Комментарии

AES это алгоритм шифрования индустриального класса, он хорошо сбалансирован по скорости и надёжности. Вот что сообщает Википедия об алгоритме AES: 'В криптографии Усовершенствованный Стандарт Шифрования (Advanced Encryption Standard, AES) это стандарт шифрования, принятый правительством Соединённых Штатов. Стандарт включает три блоковых шифра, AES-128, AES-192 и AES-256, выбранные из коллекции, первоначально опубликованной под названием Rijndael. Каждый шифр AES имеет 128-битный размер блока, с ключами размера 128, 192 и 256 бит соответственно. Шифры AES были всесторонне проанализированы и ныне используются во всём мире.'

PureBasic использует совместимую с RFC реализацию алгоритма AES. Дальнейшие сведения вы найдёте в тексте RFC 3602: http://www.ietf.org/rfc/rfc3602.txt.

Пример: CBC

; Шифруем строку
;
String$ = "Здравствуйте, это тест для AES"

StringMemorySize = StringByteLength(String$) + SizeOf(Character) ; Пробел для строки и ее завершающий символ
*CipheredString = AllocateMemory(StringMemorySize)
*DecipheredString = AllocateMemory(StringMemorySize)

If AESEncoder(@String$, *CipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Ciphered: "+PeekS(*CipheredString) ; Предупреждение, это остановится на первом нулевом байте, только для демонстрации.

    AESDecoder(*CipheredString, *DecipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Deciphered: "+PeekS(*DecipheredString)
EndIf

DataSection
    Key:
    Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06

    InitializationVector:
    Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41
EndDataSection

Пример: ECB

; Должно быть скомпилировано в режиме ascii
;
String$ = "Здравствуйте, это тест для AES"

*CipheredString  = AllocateMemory(Len(String$)+ SizeOf(Caractere)) ; Пробел для строки
*DecipheredString = AllocateMemory(Len(String$)+ SizeOf(Caractere))    ; и ее нулевой завершающий символ (режим ASCII)

If AESEncoder(@String$, *CipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
    Debug "Ciphered: "+PeekS(*CipheredString)

    AESDecoder(*CipheredString, *DecipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
    Debug "Deciphered: "+PeekS(*DecipheredString)
EndIf

DataSection
    Key:
    Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
EndDataSection

См. также

AESDecoder(), StartAESCipher()

Поддерживаемые OS

Все

<- AESDecoder() - Оглавление Cipher - AddCipherBuffer()->