Модуль BytesUtils
Описание
Утилита для работы с битами, динамическими массивами байтов и потоками байтов Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
<author> © Рудой Андрей Игоревич</author>
Используемые модули
- Classes
- Hash
- Math
- Registry
- SysUtils
- Winapi.Windows
Обзор
Процедуры и функции
procedure AllGUIDToByteArrays(const AGUID: TGUID; out D1Bytes, D2Bytes, D3Bytes, D4Bytes: TBytes); |
procedure AllGUIDToByteArraysBE(const AGUID: TGUID; out D1Bytes, D2Bytes, D3Bytes, D4Bytes: TBytes); |
function ApplySBox( Data, SBox: TBytes): TBytes; |
function BitsToBytes(const Bits: TBits): TBytes; |
function BitsToBytesAligned(const Bits: TBits; TotalBytes: Integer = -1; FillValue: Boolean = False): TBytes; |
function BitsToBytesEx(const Bits: TBits; BitOrder: TBitOrder = boLSBFirst): TBytes; |
function BitsToBytesFast(const Bits: TBits): TBytes; |
function BitsToString(const Bits: TBits): string; |
function BytesToBinaryString(const Data: TBytes): string; |
function BytesToBits(const Data: TBytes): TBits; |
function BytesToBitsAdvanced(const Data: TBytes; StartBit: Integer = 0; BitCount: Integer = -1): TBits; |
function BytesToBitsEx(const Data: TBytes; BitOrder: TBitOrder = boLSBFirst): TBits; |
function BytesToBitsFast(const Data: TBytes): TBits; |
function BytesToDateTime(const ABytes: TBytes): TDateTime; |
function BytesToHex(Source: TBytes): string; |
function BytesToSystemTime(AValue: TBytes): TSystemTime; |
function CompareBytes(const Arr1, Arr2: TBytes): Boolean; |
function CompareStreams(Stream1, Stream2: TStream): Boolean; |
function ConcatBytesFast(const A, B: TBytes): TBytes; |
function CreateInvSBox(const Key, Seed: TBytes): TBytes; |
function CreateSBox(Key, Seed: TBytes): TBytes; |
function DateTimeToBytes(const ADateTime: TDateTime): TBytes; |
function GenerateKeystream(const AKey, ASeed: TBytes; AOutputLength: Integer): TBytes; |
function GenerateRandomBytes(Size: Int64): TBytes; |
function GUIDToBytes(const AGUID: TGUID): TBytes; |
function HexToBytes(Source: string): TBytes; |
procedure InitializeMatrix(out ByteMatrix: Array of TBytes; Key, Nonce: TBytes); |
function InverseBytesA(ASource: TBytes): TBytes; |
function InverseBytesR(ASource: TBytes): TBytes; |
function NonlinearDistortion(ASource: TBytes): TBytes; |
function Number64ToBytes(const Number: Int64; IsBigEndian: Boolean = True): TBytes; |
function NumberToBytes(const Number: int64): TBytes; |
function PKCS7Padding(const Data: TBytes; BlockSize: Integer): TBytes; |
function PKCS7Unpadding(const Data: TBytes): TBytes; |
function ProcessData(Source: TBytes; ByteMatrix: Array of TBytes; Encrypt: Boolean): TBytes; |
function ReadBytesFromRegistry(const RootKey: HKEY; const KeyPath, ValueName: string): TBytes; |
function ROLByte(Value: Byte; Shift: Integer): Byte; |
function ROLbytes(ASource: TBytes; Shift: integer): TBytes; |
function ROLlongword(Value: LongWord; Shift: integer): LongWord; |
function RORByte(Value: Byte; Shift: Integer): Byte; |
function RORbytes(ASource: TBytes; Shift: integer): TBytes; |
function RORlongword(Value: LongWord; Shift: integer): LongWord; |
procedure SecureErase(var Data: TBytes); |
procedure SplitBytesFast(const Source: TBytes; out Left, Right: TBytes); |
procedure SplitStream(Stream: TBytesStream; out b1, b2: TBytes); |
function SystemTimeToBytes(AValue: TSystemTime): TBytes; |
function ValidateSBoxPair(const SBox, InvSBox: TBytes): Boolean; |
procedure WriteBytesToRegistry(const RootKey: HKEY; const KeyPath, ValueName: string; const Data: TBytes); |
function XORgamma(ASource, AKey: TBytes; out HMAC: TBytes): TBytes; |
Типы
TBitOrder = (...); |
Константы
ABOX: TBytes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
255]; |
InvSBoxAES: TBytes = [82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251,
124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203,
84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78,
8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37,
114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146,
108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132,
144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6,
208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107,
58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115,
150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110,
71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27,
252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244,
31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95,
96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239,
160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97,
23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125]; |
MatrixBox: Array of TBytes = [[99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118,
202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21,
4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117,
9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132,
83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207,
208, 239, 170, 251, 67, 77, 51, 133, 73, 249, 2, 127, 80, 60, 159, 168,
81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210,
205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115,
96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219,
224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121,
231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8,
186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138,
112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158,
225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22],
[255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244,
243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230,
229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216,
215, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202,
201, 200, 199, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188,
187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, 174,
173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160,
159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146,
145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132,
131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118,
117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104,
103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87,
86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69,
68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,
50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15,
14, 13, 12, 11, 10, 9, 8, 8, 7, 6, 5, 4, 3, 2, 1, 0]]; |
RBOX: TBytes = [255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244,
243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230,
229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216,
215, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202,
201, 200, 199, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188,
187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, 174,
173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160,
159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146,
145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132,
131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118,
117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104,
103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87,
86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69,
68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,
50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15,
14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; |
SBoxAES: TBytes = [99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118,
202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21,
4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117,
9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132,
83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207,
208, 239, 170, 251, 67, 77, 51, 133, 73, 249, 2, 127, 80, 60, 159, 168,
81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210,
205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115,
96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219,
224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121,
231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8,
186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138,
112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158,
225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22]; |
Переменные
InvSBox: TBytes; |
SBox: TBytes; |
Описание
Процедуры и функции
procedure AllGUIDToByteArrays(const AGUID: TGUID; out D1Bytes, D2Bytes, D3Bytes, D4Bytes: TBytes); |
|
Разбивает GUID на 4 отдельных массива байтов (Little-Endian). © Рудой Андрей Игоревич, 2005 - 2025 г.
Порядок байтов сохраняется как в исходном GUID <author> © Рудой Андрей Игоревич</author> Параметры
|
procedure AllGUIDToByteArraysBE(const AGUID: TGUID; out D1Bytes, D2Bytes, D3Bytes, D4Bytes: TBytes); |
|
Разбивает GUID на 4 отдельных массива байтов (Big-Endian). © Рудой Андрей Игоревич, 2005 - 2025 г.
Преобразует компоненты D1-D3 в Big-Endian порядок <author> © Рудой Андрей Игоревич</author> Параметры
|
function ApplySBox( Data, SBox: TBytes): TBytes; |
|
Выполняет подстановку байтов в данных с использованием S-Box
<author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияДанные после применения подстановки |
function BitsToBytes(const Bits: TBits): TBytes; |
|
Преобразует битовое представление TBits в массив байтов TBytes. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Биты упаковываются в байты в порядке от младшего к старшему (LSB first) Если количество битов не кратно 8, последний байт дополняется нулями в старших битах Для пустого или неинициализированного TBits возвращается пустой массив <example>
var
Bits: TBits;
Bytes: TBytes;
begin
Bits := TBits.Create;
try
Bits.Size := 12;
Bits[0] := True; Bits[1] := False; Bits[2] := True; // 101...
Bits[3] := False; Bits[4] := True; Bits[5] := False; // 010...
// ... и так далее
Bytes := BitsToBytes(Bits);
// Bytes теперь содержит упакованные байты
finally
Bits.Free;
end;
end;
</example> Параметры
Возвращаемые значенияДинамический массив байтов TBytes, содержащий упакованное битовое представление |
function BitsToBytesAligned(const Bits: TBits; TotalBytes: Integer = -1; FillValue: Boolean = False): TBytes; |
|
Преобразует битовое представление TBits в массив байтов TBytes с выравниванием и заполнением. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Полезно для создания данных фиксированного размера с определенным заполнением Если TotalBytes больше необходимого, дополнительные биты заполняются указанным значением Если TotalBytes меньше необходимого, данные обрезаются Параметры
Возвращаемые значенияДинамический массив байтов TBytes заданного размера с упакованным битовым представлением |
function BitsToBytesEx(const Bits: TBits; BitOrder: TBitOrder = boLSBFirst): TBytes; |
|
Преобразует битовое представление TBits в массив байтов TBytes с указанием порядка битов. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Позволяет контролировать порядок битов при упаковке, что важно для совместимости с различными алгоритмами и форматами данных Параметры
Возвращаемые значенияДинамический массив байтов TBytes, содержащий упакованное битовое представление |
function BitsToBytesFast(const Bits: TBits): TBytes; |
|
Быстрое преобразование битового представления TBits в массив байтов TBytes. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Использует прямой доступ к памяти через указатели для повышения производительности Рекомендуется для работы с большими битовыми массивами Параметры
Возвращаемые значенияДинамический массив байтов TBytes, содержащий упакованное битовое представление |
function BitsToString(const Bits: TBits): string; |
|
Преобразует битовый массив TBits в строковое представление из '0' и '1'. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Каждый бит представляется символом '1' (True) или '0' (False) Полезно для отладки и визуализации битовых данных Параметры
Возвращаемые значенияСтрока, содержащая символьное представление битового массива |
function BytesToBinaryString(const Data: TBytes): string; |
|
Преобразует массив байтов TBytes в строку бинарного представления. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Каждый байт представляется как 8 символов '0' и '1' в порядке LSB first Байты разделяются пробелами для удобства чтения Параметры
Возвращаемые значенияСтрока, содержащая бинарное представление каждого байта, разделенное пробелами |
function BytesToBits(const Data: TBytes): TBits; |
|
Преобразует массив байтов TBytes в битовое представление TBits. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Каждый байт преобразуется в 8 битов, биты располагаются в порядке от младшего (LSB) к старшему (MSB) Размер результирующего TBits будет равен Length(Data) * 8 <example> var Bytes: TBytes; Bits: TBits; begin SetLength(Bytes, 2); Bytes[0] := 170; // 10101010 Bytes[1] := 85; // 01010101 Bits := BytesToBits(Bytes); // Bits теперь содержит 16 битов: 0101010110101010 end; </example> Параметры
Возвращаемые значенияОбъект TBits, содержащий битовое представление входных данных |
function BytesToBitsAdvanced(const Data: TBytes; StartBit: Integer = 0; BitCount: Integer = -1): TBits; |
|
Расширенное преобразование массива байтов в битовое представление с возможностью частичного извлечения. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Полезно для извлечения определенных битовых полей из больших массивов данных без необходимости преобразования всего массива Параметры
Возвращаемые значенияОбъект TBits, содержащий указанное количество битов начиная с указанной позиции |
function BytesToBitsEx(const Data: TBytes; BitOrder: TBitOrder = boLSBFirst): TBits; |
|
Преобразует массив байтов TBytes в битовое представление TBits с указанием порядка битов. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Позволяет контролировать порядок битов при преобразовании, что важно для некоторых алгоритмов и форматов данных Параметры
Возвращаемые значенияОбъект TBits, содержащий битовое представление входных данных в указанном порядке |
function BytesToBitsFast(const Data: TBytes): TBits; |
|
Быстрое преобразование массива байтов в битовое представление с оптимизацией для больших массивов. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Использует прямой доступ к памяти через указатели для повышения производительности Рекомендуется для работы с большими массивами данных Параметры
Возвращаемые значенияОбъект TBits, содержащий битовое представление входных данных |
function BytesToDateTime(const ABytes: TBytes): TDateTime; |
|
Преобразует массив байтов обратно в значение TDateTime © Рудой Андрей Игоревич, 2005 - 2025 г.
<author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияЗначение TDateTime, восстановленное из массива байтов Вызывает исключения
|
function BytesToHex(Source: TBytes): string; |
|
Преобразует массив байт в шестнадцатеричное строковое представление. © Рудой Андрей Игоревич, 2005 - 2025 г.
Каждый байт входного массива преобразуется в два шестнадцатеричных символа. Например: байт $FF преобразуется в строку "FF", байт $0A преобразуется в "0A". Функция обрабатывает пустые массивы корректно, возвращая пустую строку. <example> var Data: TBytes; HexStr: string; begin Data := [$48, $65, $6C, $6C, $6F]; // Байты для слова "Hello" HexStr := BytesToHex(Data); // Результат: "48656C6C6F" end; </example> Параметры
Возвращаемые значенияСтрока, содержащая шестнадцатеричное представление байт в верхнем регистре |
function BytesToSystemTime(AValue: TBytes): TSystemTime; |
|
Преобразует динамический массив байт (TBytes) обратно в структуру TSystemTime. Ожидает, что массив байт был создан функцией SystemTimeToBytes.
Функция ожидает массив точно размером SizeOf(TSystemTime) (16 байт). Порядок байт предполагается little-endian (архитектура x86). Для кроссплатформенной совместимости может потребоваться дополнительное преобразование порядка байт при работе с данными из big-endian систем. Параметры
Возвращаемые значенияСтруктура TSystemTime, восстановленная из двоичного представления. Вызывает исключения
|
function CompareBytes(const Arr1, Arr2: TBytes): Boolean; |
|
Сравнивает два массива байтов на идентичность. © Рудой Андрей Игоревич, 2005 - 2025 г.
Функция сначала проверяет равенство длин массивов, что позволяет быстро определить несовпадение без глубокого сравнения содержимого. Для сравнения содержимого используется оптимизированная функция CompareMem, которая сравнивает блоки памяти напрямую. Особенности: <list type="bullet"> <item>Пустые массивы считаются равными только если оба пусты</item> <item>Сложность выполнения: O(n), где n - длина массивов</item> <item>Использует побитовое сравнение для максимальной производительности</item> </list> <example> Пример использования: var Arr1, Arr2: TBytes; IsEqual: Boolean; begin Arr1 := [1, 2, 3, 4]; Arr2 := [1, 2, 3, 4]; IsEqual := CompareBytes(Arr1, Arr2); // Возвращает True Arr2 := [1, 2, 3]; IsEqual := CompareBytes(Arr1, Arr2); // Возвращает False (разная длина) end; </example> Параметры
Возвращаемые значенияВозвращает True если: <list type="bullet"> <item>Оба массива имеют одинаковую длину</item> <item>Все соответствующие байты в массивах идентичны</item> </list> Возвращает False в противном случае. |
function CompareStreams(Stream1, Stream2: TStream): Boolean; |
|
Сравнивает содержимое двух потоков на идентичность. © Рудой Андрей Игоревич, 2005 - 2025 г.
Алгоритм сравнения: <list type="number"> <item>Сначала сравниваются размеры потоков</item> <item>Позиции потоков сбрасываются в начало</item> <item>Содержимое сравнивается блоками по 8 КБ</item> <item>Сравнение прекращается при первом несовпадении</item> </list> Особенности: <list type="bullet"> <item>Не изменяет исходное содержимое потоков</item> <item>Сбрасывает позиции потоков в начало перед сравнением</item> <item>После сравнения позиции потоков остаются в конце</item> <item>Оптимизирован по памяти (использует буферы фиксированного размера)</item> <item>Подходит для сравнения больших файлов и потоков</item> </list> Ограничения: <list type="bullet"> <item>Потоки должны поддерживать изменение позиции</item> <item>Не подходит для бесконечных или не seekable потоков</item> </list> <example> Пример использования:
var
FileStream1, FileStream2: TFileStream;
IsEqual: Boolean;
begin
FileStream1 := TFileStream.Create('file1.txt', fmOpenRead);
FileStream2 := TFileStream.Create('file2.txt', fmOpenRead);
try
IsEqual := CompareStreams(FileStream1, FileStream2);
finally
FileStream1.Free;
FileStream2.Free;
end;
end;
</example> Параметры
Возвращаемые значенияВозвращает True если: <list type="bullet"> <item>Оба потока имеют одинаковый размер</item> <item>Все байты в потоках идентичны и в одинаковом порядке</item> </list> Возвращает False в противном случае. Вызывает исключения
|
function ConcatBytesFast(const A, B: TBytes): TBytes; |
|
Быстро объединяет два массива байт в один результирующий массив. Оптимизированная реализация с обработкой случаев пустых массивов. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
<note> Функция использует проверки длины массивов для оптимизации работы и избежания ненужных операций копирования при работе с пустыми массивами. </note> <author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияМассив байт типа TBytes, содержащий:
|
function CreateInvSBox(const Key, Seed: TBytes): TBytes; |
|
Создает обратную таблицу подстановок (Inverse S-Box) для S-Box, сгенерированного функцией CreateSBox с использованием тех же параметров Key и Seed. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Функция создает S-Box с использованием тех же параметров Key и Seed, что и при шифровании, а затем строит обратную таблицу, где для каждого значения S-Box[i] = j устанавливается InvS-Box[j] = i. Это обеспечивает возможность обратного преобразования данных. Особенности реализации: <list type="bullet"> <item>Требует тех же Key и Seed, что использовались при создании исходного S-Box</item> <item>Гарантирует, что InvS-Box(S-Box(x)) = x для любого байта x</item> <item>Выполняет безопасное удаление промежуточных данных из памяти</item> </list> Для корректной работы дешифрования необходимо использовать точно такие же Key и Seed, которые применялись при шифровании данных. <example> Пример использования для шифрования и дешифрования:
var
Key, Seed, SBox, InvSBox, Data, Encrypted, Decrypted: TBytes;
begin
// Генерация ключа и сида
Key := GenerateRandomBytes(32);
Seed := GenerateRandomBytes(16);
// Создание S-Box для шифрования
SBox := CreateSBox(Key, Seed);
// Шифрование данных
Encrypted := EncryptWithSBox(Data, SBox);
// Создание обратного S-Box для дешифрования
InvSBox := CreateInvSBox(Key, Seed);
// Дешифрование данных
Decrypted := DecryptWithSBox(Encrypted, InvSBox);
// Проверка результата
if CompareBytes(Data, Decrypted) then
ShowMessage('Дешифрование успешно');
end;
</example> <author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияОбратная таблица подстановок InvS-Box в виде массива байт (TBytes) размером 256 элементов, позволяющая выполнить обратное преобразование данных, зашифрованных с использованием S-Box Вызывает исключения
Материалы по теме
|
function CreateSBox(Key, Seed: TBytes): TBytes; |
|
Создает криптографически стойкую таблицу подстановок (S-Box) размером 256 байт на основе детерминированного псевдослучайного ключевого потока. © Рудой Андрей Игоревич, 2005 - 2025 г.
<example> Пример использования:
var
Key, Seed, SBox: TBytes;
begin
// Генерация ключа и сида
Key := GenerateRandomBytes(32); // 256-битный ключ
Seed := GenerateRandomBytes(16); // 128-битный сид
// Создание S-Box
SBox := CreateSBox(Key, Seed);
try
// Проверка валидности
if not ValidateSBox(SBox) then
raise Exception.Create('Недопустимый S-Box');
// Использование S-Box в алгоритме шифрования
// ...
finally
// Безопасное удаление критических данных
SecureErase(Key);
SecureErase(Seed);
SecureErase(SBox);
end;
end;
</example> Функция использует алгоритм Фишера-Йейтса для криптографически безопасного перемешивания значений S-Box на основе ключевого потока, сгенерированного функцией GenerateKeyStream из модуля BytesUtils. Особенности реализации: <list type="bullet"> <item>Гарантирует уникальность всех значений в S-Box (перестановка 0-255). </item> <item>Обеспечивает детерминированность: одинаковые Key/Seed → одинаковый S-Box. </item> <item>Использует дополнительный запас ключевого потока для обработки коллизий. </item> <item>Выполняет безопасное удаление чувствительных данных из памяти. </item> </list> Для проверки валидности созданного S-Box рекомендуется использовать функцию ValidateSBox, проверяющую уникальность всех значений. <author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияТаблица подстановок S-Box в виде массива байт (TBytes) размером 256 элементов, содержащая уникальные значения от 0 до 255 в псевдослучайном порядке Вызывает исключения
Материалы по теме
|
function DateTimeToBytes(const ADateTime: TDateTime): TBytes; |
|
Преобразует значение TDateTime в массив байтов. © Рудой Андрей Игоревич, 2005 - 2025 г.
Использует внутреннее представление TDateTime как Double (8 байт) <author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияДинамический массив байтов, представляющий TDateTime |
function GenerateKeystream(const AKey, ASeed: TBytes; AOutputLength: Integer): TBytes; |
|
Генерирует псевдослучайную ключевую последовательность с помощью алгоритма HMAC-SHA512. Использует итерационную схему на основе счетчика для расширения выходных данных. © Рудой Андрей Игоревич, 2005 - 2025 г.
Алгоритм работы: 1. Проверка валидности входных параметров. 2. Ограничение вывода до MAX_ARRAY_SIZE (1 ГБ).
Особенности: Использует big-endian представление счетчика (Number64ToBytes с True). Каждая итерация добавляет 64 байта (длина вывода SHA512). Автоматически обрезает вывод до требуемой длины. Ограничения: Максимальный размер вывода: 1 ГБ (MAX_ARRAY_SIZE). Производительность может degrade при больших AOutputLength. <example> Пример использования:
var
Key, Seed, Keystream: TBytes;
begin
Key := TEncoding.UTF8.GetBytes('secret');
Seed := TEncoding.UTF8.GetBytes('salty');
Keystream := GenerateKeystream(Key, Seed, 128);
end;
</example> <author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияБайтовый массив длиной AOutputLength или меньше, если превышен лимит MAX_ARRAY_SIZE. Возвращает пустой массив при неверных входных данных. |
function GenerateRandomBytes(Size: Int64): TBytes; |
|
This item has no description. |
function GUIDToBytes(const AGUID: TGUID): TBytes; |
|
Преобразует GUID в единый массив байтов © Рудой Андрей Игоревич, 2005 - 2025 г.
Сохраняет оригинальный порядок байтов GUID <author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияМассив из 16 байтов, представляющий GUID |
function HexToBytes(Source: string): TBytes; |
|
Преобразует шестнадцатеричную строку в массив байт. © Рудой Андрей Игоревич, 2005 - 2025 г.
Строка должна содержать только допустимые шестнадцатеричные символы (0-9, A-F, a-f). Пробелы и другие разделители не допускаются. Параметры
Возвращаемые значенияМассив байт, восстановленный из шестнадцатеричного представления Вызывает исключения
|
procedure InitializeMatrix(out ByteMatrix: Array of TBytes; Key, Nonce: TBytes); |
|
This item has no description. |
function InverseBytesA(ASource: TBytes): TBytes; |
|
This item has no description. |
function InverseBytesR(ASource: TBytes): TBytes; |
|
This item has no description. |
function NonlinearDistortion(ASource: TBytes): TBytes; |
|
Выполняет нелинейные искажения динамического массива байтов по формуле: X xor (ROLbytes(X, 7)) xor (ROLbytes(X, 22)) © Рудой Андрей Игоревич, 2005 - 2025 г.
Алгоритм нелинейных искажений основан на комбинации циклических сдвигов и операции XOR, что обеспечивает: <list type="bullet"> <item> Высокую нелинейность преобразования </item> <item> Равномерное распределение выходных данных </item> <item> Сохранение длины исходных данных </item> <item> Обратимость при многократном применении (в некоторых случаях) </item> </list> Математическая формула преобразования: Особенности реализации: <list type="bullet"> <item> Использует оптимизированные функции ROLbytes из модуля BytesUtils </item> <item> Автоматически обрабатывает пустые массивы и граничные случаи </item> <item> Сохраняет исходные данные неизменными </item> <item> Возвращает новый массив, не модифицируя исходный </item> </list> Области применения: <list type="bullet"> <item> Криптографические преобразования данных </item> <item> Расширение ключевых последовательностей </item> <item> Устранение статистических закономерностей в данных </item> <item> Предобработка данных перед хешированием </item> </list> <example> Пример использования для нелинейного преобразования данных: var OriginalData, DistortedData: TBytes; begin // Исходные данные OriginalData := TBytes.Create($01, $02, $03, $04, $05); // Применение нелинейных искажений DistortedData := NonlinearDistortion(OriginalData); // DistortedData теперь содержит преобразованные данные // Можно применить повторно для усиления эффекта: DistortedData := NonlinearDistortion(DistortedData); end; Пример использования в криптографическом контексте:
var
Key, ExpandedKey: TBytes;
begin
// Генерация исходного ключа
Key := GenerateRandomBytes(32);
// Расширение ключа через нелинейные преобразования
ExpandedKey := Key + NonlinearDistortion(Key) +
NonlinearDistortion(NonlinearDistortion(Key));
end;
</example> <author>© Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияНовый динамический массив байтов той же длины, что и ASource, полученный в результате применения нелинейных искажений. Возвращает пустой массив, если ASource пуст или nil. Вызывает исключения
Материалы по теме
|
function Number64ToBytes(const Number: Int64; IsBigEndian: Boolean = True): TBytes; |
|
Преобразует целое число в массив байтов. © Рудой Андрей Игоревич, 2005 - 2025 г.
Использует внутреннее представление Int64 (8 байт) <author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияМассив байтов размером SizeOf(Int64) |
function NumberToBytes(const Number: int64): TBytes; |
|
This item has no description. |
function PKCS7Padding(const Data: TBytes; BlockSize: Integer): TBytes; |
|
This item has no description. |
function PKCS7Unpadding(const Data: TBytes): TBytes; |
|
This item has no description. |
function ProcessData(Source: TBytes; ByteMatrix: Array of TBytes; Encrypt: Boolean): TBytes; |
|
This item has no description. |
function ReadBytesFromRegistry(const RootKey: HKEY; const KeyPath, ValueName: string): TBytes; |
|
This item has no description. |
function ROLByte(Value: Byte; Shift: Integer): Byte; |
|
This item has no description. |
function ROLbytes(ASource: TBytes; Shift: integer): TBytes; |
|
Выполняет циклический сдвиг влево (ROL) массива байтов. Поддерживает как побайтовый, так и побитовый сдвиг. © Рудой Андрей Игоревич, 2005 - 2025 г.
Алгоритм работает в два этапа: <list type="number"> <item>Побайтовый сдвиг (byteShift = Shift div 8)</item> <item>Побитовый сдвиг (bitShift = Shift mod 8)</item> </list> Особенности реализации: <list type="bullet"> <item>Использует модульную арифметику для больших значений Shift</item> <item>Обрабатывает перенос битов между байтами</item> <item>Сохраняет длину исходного массива</item> </list> <example> var Source, Rotated: TBytes; begin Source := TBytes.Create($01, $02, $03); Rotated := ROLbytes(Source, 4); // Результат: сдвинутый массив байтов end; </example> Параметры
Возвращаемые значенияНовый массив байтов той же длины, что и ASource, после циклического сдвига. Пустой массив возвращается если ASource пуст или Shift = 0. Вызывает исключения
|
function ROLlongword(Value: LongWord; Shift: integer): LongWord; |
|
Выполняет циклический сдвиг влево (ROL) 32-битного беззнакового целого числа. © Рудой Андрей Игоревич, 2005 - 2025 г.
Реализация использует оптимизированную формулу: (Value shl Shift) or (Value shr (32 - Shift)) которая автоматически обрабатывает сдвиги больше 32 бит. <example> var Original, Rotated: LongWord; begin Original := $12345678; Rotated := ROLlongword(Original, 4); // Результат: $23456781 end; </example> Параметры
Возвращаемые значенияРезультат циклического сдвига Value влево на Shift бит. |
function RORByte(Value: Byte; Shift: Integer): Byte; |
|
This item has no description. |
function RORbytes(ASource: TBytes; Shift: integer): TBytes; |
|
Выполняет циклический сдвиг вправо (ROR) массива байтов. Поддерживает как побайтовый, так и побитовый сдвиг. © Рудой Андрей Игоревич, 2005 - 2025 г.
Алгоритм работает в два этапа: <list type="number"> <item>Побайтовый сдвиг (byteShift = Shift div 8)</item> <item>Побитовый сдвиг (bitShift = Shift mod 8)</item> </list> Особенности реализации: <list type="bullet"> <item>Использует модульную арифметику для больших значений Shift</item> <item>Обрабатывает перенос битов между байтами</item> <item>Сохраняет длину исходного массива</item> <item>Обрабатывает сдвиг в обратном направлении относительно ROLbytes</item> </list> <example> var Source, Rotated: TBytes; begin Source := TBytes.Create($01, $02, $03); Rotated := RORbytes(Source, 4); // Результат: сдвинутый массив байтов end; </example> Параметры
Возвращаемые значенияНовый массив байтов той же длины, что и ASource, после циклического сдвига. Пустой массив возвращается если ASource пуст или Shift = 0. Вызывает исключения
|
function RORlongword(Value: LongWord; Shift: integer): LongWord; |
|
Выполняет циклический сдвиг вправо (ROR) 32-битного беззнакового целого числа. © Рудой Андрей Игоревич, 2005 - 2025 г.
Реализация использует оптимизированную формулу: (Value shr Shift) or (Value shl (32 - Shift)) которая автоматически обрабатывает сдвиги больше 32 бит. <example> var Original, Rotated: LongWord; begin Original := $12345678; Rotated := RORlongword(Original, 4); // Результат: $81234567 end; </example> Параметры
Возвращаемые значенияРезультат циклического сдвига Value вправо на Shift бит. |
procedure SecureErase(var Data: TBytes); |
|
Безопасно стирает содержимое массива байтов. © Рудой Андрей Игоревич, 2005 - 2025 г.
Заполняет массив нулями и затем освобождает память <author> © Рудой Андрей Игоревич</author> Параметры
|
procedure SplitBytesFast(const Source: TBytes; out Left, Right: TBytes); |
|
Разделяет массив байт на две части примерно равного размера. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
<author> © Рудой Андрей Игоревич</author> Параметры
|
procedure SplitStream(Stream: TBytesStream; out b1, b2: TBytes); |
|
Разделяет содержимое TBytesStream на два массива байт примерно равного размера. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
<author> © Рудой Андрей Игоревич</author> Параметры
|
function SystemTimeToBytes(AValue: TSystemTime): TBytes; |
|
Преобразует структуру TSystemTime в динамический массив байт (TBytes). Каждое поле структуры сохраняется в порядке little-endian.
Размер возвращаемого массива всегда равен SizeOf(TSystemTime) (16 байт). Порядок байт соответствует архитектуре x86 (little-endian). Для кроссплатформенной совместимости может потребоваться дополнительное преобразование порядка байт при работе с данными на big-endian системах. Параметры
Возвращаемые значенияДинамический массив байт, содержащий двоичное представление структуры TSystemTime. |
function ValidateSBoxPair(const SBox, InvSBox: TBytes): Boolean; |
|
Проверяет корректность пары S-Box/InvS-Box. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
<author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияTrue если таблицы являются взаимно обратными, False в противном случае |
procedure WriteBytesToRegistry(const RootKey: HKEY; const KeyPath, ValueName: string; const Data: TBytes); |
|
This item has no description. |
function XORgamma(ASource, AKey: TBytes; out HMAC: TBytes): TBytes; |
|
Функция выполняет шифрование данных с использованием алгоритма XOR и генерирует HMAC-подпись для проверки целостности. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Функция реализует следующий алгоритм:
<author> © Рудой Андрей Игоревич</author> Параметры
Возвращаемые значенияЗашифрованные данные в виде массива байтов Вызывает исключения
Материалы по теме
|
Типы
TBitOrder = (...); |
|
Перечисление для определения порядка следования битов при преобразованиях. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
Используется в функциях преобразования для контроля порядка упаковки/распаковки битов Значение
|
Константы
ABOX: TBytes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
255]; |
|
This item has no description. |
InvSBoxAES: TBytes = [82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251,
124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203,
84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78,
8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37,
114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146,
108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132,
144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6,
208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107,
58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115,
150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110,
71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27,
252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244,
31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95,
96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239,
160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97,
23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125]; |
|
This item has no description. |
MatrixBox: Array of TBytes = [[99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118,
202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21,
4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117,
9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132,
83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207,
208, 239, 170, 251, 67, 77, 51, 133, 73, 249, 2, 127, 80, 60, 159, 168,
81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210,
205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115,
96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219,
224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121,
231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8,
186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138,
112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158,
225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22],
[255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244,
243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230,
229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216,
215, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202,
201, 200, 199, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188,
187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, 174,
173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160,
159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146,
145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132,
131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118,
117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104,
103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87,
86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69,
68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,
50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15,
14, 13, 12, 11, 10, 9, 8, 8, 7, 6, 5, 4, 3, 2, 1, 0]]; |
|
This item has no description. |
RBOX: TBytes = [255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244,
243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230,
229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216,
215, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202,
201, 200, 199, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188,
187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, 174,
173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160,
159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146,
145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132,
131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118,
117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104,
103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87,
86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69,
68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,
50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15,
14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; |
|
Динамический массив байтов, содержащий значения [255, 254, 253, 252, ... , 4, 3 , 2, 1, 0]. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г.
<example> Пример использования:
var
B: TBytes;
I: Integer;
begin
for I := 0 to Length(b) - 1 do b[i] := BytesUtils.RBOX[b[i]];
// Использование сгенерированных байтов
end;
</example> <author> © Рудой Андрей Игоревич</author> |
SBoxAES: TBytes = [99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118,
202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21,
4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117,
9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132,
83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207,
208, 239, 170, 251, 67, 77, 51, 133, 73, 249, 2, 127, 80, 60, 159, 168,
81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210,
205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115,
96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219,
224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121,
231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8,
186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138,
112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158,
225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22]; |
|
This item has no description. |
Переменные
InvSBox: TBytes; |
|
This item has no description. |
SBox: TBytes; |
|
This item has no description. |
Сгенерировал PasDoc 0.16.0-snapshot.