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
Все