Когда я пытаюсь кодировать некоторые двоичные данные все работает отлично:LockBox3 DecryptStream не может создать простой поток
void __fastcall TForm1::EncryptBtnClick(TObject *Sender)
{
char plainchar[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
char keychar[16]={0xE8,0xE9,0xEA,0xEB,0xED,0xEE,0xEF,0xF0,0xF2,0xF3,0xF4,0xF5,0xF7,0xF8,0xF9,0xFA};
char chiperchar[16];
TMemoryStream *plainStream;
TMemoryStream *chiperStream;
TMemoryStream *keyStream;
plainStream = new TMemoryStream();
chiperStream = new TMemoryStream();
keyStream = new TMemoryStream();
plainStream->Clear();
plainStream->Position=0;
plainStream->WriteBuffer(plainchar,16);
plainStream->Position=0;
keyStream->Clear();
keyStream->Position=0;
keyStream->WriteBuffer(keychar,16);
keyStream->Position=0;
Codec1->Reset();
Codec1->InitFromStream(keyStream);
Codec1->EncryptStream(plainStream,chiperStream);
chiperStream->Position=0;
chiperStream->ReadBuffer(chiperchar,16);
plainStream->Free();
chiperStream->Free();
keyStream->Free();
}
И я получаю ожидается
0x3E,0x45,0xC2,0x15,0xBA,0x45,0x0E,0xA6,0xEF,0x94,0xA3,0x08,0x82,0xB8,0x1B,0xD4
в chiperchar буфере.
К сожалению, когда я пытаюсь использовать функцию DecryptStream для указанного выше буфера Chiper, он не создает простой поток данных (поток 0 байт длина)
void __fastcall TForm1::DecryptBtnClick(TObject *Sender)
{
char chiperchar[16]={0x3E,0x45,0xC2,0x15,0xBA,0x45,0x0E,0xA6,0xEF,0x94,0xA3,0x08,0x82,0xB8,0x1B,0xD4};
char keychar[16]={0xE8,0xE9,0xEA,0xEB,0xED,0xEE,0xEF,0xF0,0xF2,0xF3,0xF4,0xF5,0xF7,0xF8,0xF9,0xFA};
char plainchar[16];
TMemoryStream *plainStream;
TMemoryStream *chiperStream;
TMemoryStream *keyStream;
plainStream = new TMemoryStream();
chiperStream = new TMemoryStream();
keyStream = new TMemoryStream();
chiperStream->Clear();
chiperStream->Position=0;
chiperStream->WriteBuffer(chiperchar,16);
chiperStream->Position=0;
keyStream->Clear();
keyStream->Position=0;
keyStream->WriteBuffer(keychar,16);
keyStream->Position=0;
Codec1->Reset();
Codec1->InitFromStream(keyStream);
plainStream->Clear();
plainStream->Position=0;
Codec1->DecryptStream(plainStream,chiperStream);
plainStream->Position=0;
chiperStream->Position=0;
plainStream->Position=0;
plainStream->ReadBuffer(plainchar,16);
plainStream->Free();
chiperStream->Free();
keyStream->Free();
}
Что я dooing неправильно? Почему DecrpytStream не может создать правильный поток?
Когда я использую функции EncryptString и DecryptString, все работает нормально, и после шифрования и дешифрования я получаю одну и ту же строку.
CODEC1 свойства:
AsymetricKeySizeInBits = 128
AdvancedOptions2 = []
CryptoLibrary = CryptographicLibrary1
StreamCipherId = 'native.StreamToBlock'
BlockCipherId = 'native.AES-128'
ChainId = 'native.ECB'
LockBox является криптографическая библиотека Delphi. Что это за язык? Ява? C++? Какую версию Lockbox вы используете и откуда вы ее отправили? –
Это C++ Builder 10 Seattle от Embarcadero, LockBox версия 3.5.0 была получена из сборки GetIt Package Manager в среде IDE. Я пробовал использовать функции DecryptStream и DecryptMemory. В обоих случаях функция не заполняет plainStream (plainStream-> Длина еще 0). Функция EncryptStream работает отлично, а также EncryptString и DecryptString. Можете ли вы предоставить любой рабочий демо-код для C++ или Delphi? – Sebastor
После установки мне пришлось прокомментировать эту строку «__property TOnGenerateKeyFunc OnCustomCipherGenerateKey = {read = FOnGenerateKeyFunc, write = FOnGenerateKeyFunc};" в файле Utplb_cryptographiclibrary.hpp. Может ли это быть проблемой этих проблем? – Sebastor