Wenn ich versuche, einige binäre Daten alles gut funktioniert zu kodieren:LockBox3 DecryptStream können Normalstrom nicht schaffen
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();
}
Und ich erwartet erhalten
0x3E,0x45,0xC2,0x15,0xBA,0x45,0x0E,0xA6,0xEF,0x94,0xA3,0x08,0x82,0xB8,0x1B,0xD4
in chiperchar Puffer.
Leider, wenn ich versuche DecryptStream Funktion für über chiper Puffer zu verwenden, ist es nicht glatt Datenstrom schafft (Strom ist 0 Byte Länge)
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();
}
Was ich dooing falsch? Warum kann DecrpytStream keinen korrekten Stream erstellen?
Wenn ich EncryptString und DecryptString Funktionen verwende, funktioniert alles gut, und nach der Verschlüsselung und Entschlüsselung bekomme ich die gleiche Zeichenfolge.
CODEC1 Eigenschaften sind:
AsymetricKeySizeInBits = 128
AdvancedOptions2 = []
CryptoLibrary = CryptographicLibrary1
StreamCipherId = 'native.StreamToBlock'
BlockCipherId = 'native.AES-128'
ChainId = 'native.ECB'
Lockbox 3.6.3 von https://github.com/SeanBDurkin/tplockbox verwendet, ist eine Delphi-Verschlüsselungsbibliothek. Welche Sprache ist das? Java? C++? Welche Version von Lockbox benutzt du und woher hast du sie bezogen? –
Dies ist C++ Builder 10 Seattle von Embarcadero, LockBox Version 3.5.0 wurde von GetIt Package Manager in IDE erstellt. Ich habe versucht, DecryptStream und DecryptMemory Funktionen zu verwenden. In beiden Fällen füllt Funktion nicht plainStream (plainStream-> Lenght ist immer noch 0). Die EncryptStream-Funktion funktioniert genauso gut wie EncryptString und DecryptString. Können Sie bitte einen funktionierenden Demo-Code für C++ oder Delphi bereitstellen? – Sebastor
Nach der Installation musste ich diese Zeile kommentieren "__property TOnGenerateKeyFunc OnCustomCipherGenerateKey = {read = FOnGenerateKeyFunc, write = FOnGenerateKeyFunc};" in der Datei Utplb_cryptographiclibrary.hpp. Könnte dies das Problem sein? – Sebastor