Chrome에서 비밀번호를 가져 오는 복구 앱을 쓰고 있습니다. 그것은 GUI를 가지고 있으므로 SQLConnection과 SQLQuery를 모두 사용하는 SQLite 래퍼를 사용했습니다. 여기 내 코드 싹둑입니다 : 뭔가 내 널 (NULL) 종료와 잘못된 것처럼이 동작을 제외하고CryptUnprotectData가있는 RAD Studio CreateBlobStream이 추가 문자를 반환하는 이유는 무엇입니까?
//Create our blob stream
TStream *Stream2 = SQLQuery1->CreateBlobStream(SQLQuery1->FieldByName("password_value"), bmRead);
//Get our blob size
int size = Stream2->Size;
//Create our buffer
char* pbDataInput = new char[size+1];
//Adding null terminator to buffer
memset(pbDataInput, 0x00, sizeof(char)*(size+1));
//Write to our buffer
Stream2->ReadBuffer(pbDataInput, size);
DWORD cbDataInput = size;
DataOut.pbData = pbDataInput;
DataOut.cbData = cbDataInput;
LPWSTR pDescrOut = NULL;
//Decrypt password
CryptUnprotectData(&DataOut,
&pDescrOut,
NULL,
NULL,
NULL,
0,
&DataVerify);
//Output password
UnicodeString password = (UnicodeString)(char*)DataVerify.pbData;
passwordgrid->Cells[2][i] = password;
출력 데이터는, 잘 보인다. 여기 출력은 모든 라인의 모습입니다 : 내가 읽은
CryptUnprotectData
에 대한
윈도우 문서 :
https://msdn.microsoft.com/en-us/library/windows/desktop/aa382377.aspx
CreateBlobStream
에 대한
엠바 카데로 문서 :
http://docwiki.embarcadero.com/Libraries/en/Data.DB.TDataSet.CreateBlobStream
memset 함수 :
http://www.cplusplus.com/reference/cstring/memset/
고마워, 널 머리말에 널 터미네이터와 관련이있다. 당신의 대답을 upvoting. –