0
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字节lenght)
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加密库。这是什么语言? Java的? C++?你使用的是什么版本的Lockbox,你是从哪里获得的? –
这是来自Embarcadero的C++ Builder 10 Seattle,LockBox 3.5.0版本源自IDE中的GetIt Package Manager构建。我试过使用DecryptStream和DecryptMemory函数。在这两种情况下,函数都不会填充plainStream(plainStream-> Lenght仍然为0)。 EncryptStream函数正常工作,以及EncryptString和DecryptString。您能否提供任何适用于C++或Delphi的演示代码? – Sebastor
安装完成后,我不得不评论这一行“__property TOnGenerateKeyFunc OnCustomCipherGenerateKey = {read = FOnGenerateKeyFunc,write = FOnGenerateKeyFunc};”在Utplb_cryptographiclibrary.hpp文件中。这可能是这些问题的窍门吗? – Sebastor