OpenSSL problem z wywoływaniem enkrypcji z funkcji

0

Cześć,
Piszę bibliotekę do szyfrowania/deszyfrowania pliku z hasłami.
W trakcie pisania hasło przekazywałem w postaci zahardkodowanej T t("password").
Jak przerobiłem to tak by było przyjmowane jako argument z linii komend to się posypało, i co najlepsze nie mam pojęcia czemu xd
Próbowałem stu sposobów na wszelakie rzutowania i kopiowania, ale bez skutku.
Jakby ktoś chciał to odpalić to może pobrać image:

docker pull xaar/keysecure
docker run --name forum -it xaar/keysecure bash
make fail/works
make run

make fail/works kompiluje plik fail.cpp/works.cpp które się różnią jedną liniką. Zresztą można popatrzeć do makefile'a :P

Poblematyczny kod niżej:

int main(int argc, const char* argv[]) { 
const char* pass = "123456";  // works
// const char* pass = const_cast<const char*>(argv[1]);  // fail    
kfp::Keysecure key("new.kfp", "conf", pass);      
...

Z góry dzięki za pomoc!

1

Próbowałem stu sposobów na wszelakie rzutowania i kopiowania, ale bez skutku.

A tego najprostszego próbowałeś?

kfp::Keysecure key("new.kfp", "conf", argv[1]);

Nie czaję po co Ci jakieś rzutowania, jeśli argument jest typu const char* a argv to tablica tego właśnie typu.

0

Udało mi się to zreprodukować ograniczając się do 4 funkcji i jednego pliku.
Okazuje się że jeśli wywołuje encrypt/decrypt w tej samej funkcji to jest okej, ale jeśli encrypt/decrypt są w różnych funkcjach to już się psuje.
Probowałem to debugować i wydaje się że wszystko jest okej, ale może coś przeoczyłem.
Problematyczny kod:

void invoke(std::string s) { encrypt(s.c_str()); }

int main(int argc, const char *argv[]) {
  std::remove("new.kfp");
  std::string password_cpp = "123456";
  invoke(password_cpp);  // fail
  // encrypt(password_cpp.c_str());//works
  decrypt(password_cpp.c_str());
}

Docker:

docker pull xaar/keysecure
docker run --name forum -it xaar/keysecure bash
make fail/works
make run

Zamieszczam w załączniku dwa pliki które różnią się jedną linijką.
Dependencje: g++ make openssl openssl-dev
EDIT:
Nie wiem dlaczego nie mogę zamieścić załącznika, wklejam pastebiny:
https://4programmers.net/Pastebin/11166 //fail
https://4programmers.net/Pastebin/11167 //works

Każda wskazówka jest na wagę złota!
Z góry dzięki :)

0

UPDATE
Zrobiło się jeszcze ciekawiej :P
Jeśli hasło jest przekazywane do funkcji encrypt/decrypt z tej samej zmiennej to jest okej, ale jeśli są osobne zmienne(które mają tą samą wartość) dla enkrypcji/dekrypcji to się psuje:



int main(int argc, const char *argv[]) {
  std::remove("new.kfp");
  std::string password_cpp = "123456";
  std::string password_cpp2 = "123456";
  // fail
  encrypt(password_cpp.c_str());
  decrypt(password_cpp2.c_str());
  // works
  // encrypt(password_cpp.c_str());
  // decrypt(password_cpp.c_str());
}
1

A próbowałeś użyć najpierw ORYGINAŁU przed swoimi modyfikacjami? Jeśli nikt nie zdoła Ci pomóc to rano jak wytrzeźwieje to spróbuje to zreprodukować, ciekawe raportujesz objawy bądź co bądź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1