Szyfrowanie zdjęcia??

0

Witajcie.
Potrzebuje jakiejś metody na szyfrowanie i rozszyfrowywanie zdjęcia.
Potrzebuje zaszyfrować zdjęcie, tak aby tylko mój program potrafił je odtworzyć.
Z tekstem sobie poradziłem, ale na zdjęcie nie mam pomysłu.

Jakies pomysły, rozwiązania??
Będę wdzięczny.

0

a czym się to rózni?

txt = plik; bmp = plik;
txt = array [1..filesize] of char;
bmp = array [1..filesize] of byte;

gdzie pomiedzy char a byte tak naprawdę nie ma kompletnie żadnej różnicy (ci co piszą w C wiedzą o czym mówię).

Tak więc plik, nieważne jaki to tak naprawdę tablica bajtów. Jak chcesz prosto zaszyfrować zdjęcie to uzyj ksorowania np z maską $55;

0

każdy pixel w obrazie ma swoje 3 wartości RGB (Red, Green, Blue)
Każda z tych wartości mieści się w przedziale 0-255 (Bardzo podobnie do ASCII) .. możesz zrobić tak że program pobierze wartość Red i doda do niego liczbę np. 545453
I tak dalej. W każdym programie graficznym wyświetli Ci się biały obrazek. Lecz u Ciebie tą wartość znowu odejmij i wyjdzie Ci obrazek :-P
Wiem, że zagmatwałem :-P

Przedstawię to tak:
Wartości domyślne (np.):
Red: 50
Green: 100
Blue: 150

Dodajesz teraz 55454
i wartości będą miały:
Red: 50 + 55454
Green: 100 + 55454
Blue: 150 + 55454

Potem przy wczytywaniu odejmujesz te wartości z powrotem ;-)

Rozumiesz o co mi chodzi? ;-)
Jeśli nie to spróbuje jaśniej wytłumaczyć ;-)

edit:
Olek mnie znowu wyprzedził :-P

0

No tekst mam w Memo, później funkcja mi tam koduje ten tekst w jakiś tam sposób i zawartość memo zapisuje sobie do pliku i jest niedo odczytania.
Zdjęcie tez bym tak chciał ale własnie tu jest problem.

Jak na razie to metoda PoP_Gniezno jest jedynym wyjściem.

0

Bo memo nie czyta wartości niektórych znaków ascii
zapisz bitmape w memoryStream i wtedy koduj
Pop coś pitoli biały obrazek nie wyjdzie :)

0

Nie wyjdzie biały..ale wyjdzie mozajka! :-D i o to chodzi co nie? :-P
A puchatek007 możesz zapisać jako zwykłą bitmape.. na to samo wyjdzie (chyba)

Image1.Picture.SaveToFile('sciezka');
0
var
 Tab :array of Byte;
 FS  :TFileStream;
 i   :LongWord;

begin
 FS := TFileStream.Create('plik.graficzny', fmOpenReadWrite);
 Setlength(Tab, FS.Size);
 for i := 0 to FS.Size-1 do Tab[i] := Tab[i] xor $55;
 FS.WriteBuffer(Tab, FS.Size);
 FS.Free;
end;

Jakoś tak, naskrobałem na szybko

0
Oleksy_Adam napisał(a)
var
 Tab :array of Byte;
 FS  :TFileStream;
 i   :LongWord;

begin
 FS := TFileStream.Create('plik.graficzny', fmOpenReadWrite);
 Setlength(Tab, FS.Size);
 for i := 0 to FS.Size-1 do Tab[i] := Tab[i] xor $55;
 FS.WriteBuffer(Tab, FS.Size);
 FS.Free;
end;

OK, a jak wrócić??
Myślałem, żeby odwrócic proces i dałem:

Tab[i] := $55 xor Tab[i];

Ale to nie pomogło :(.

0

[green]
Xorowanie jest piękne bo kodowanie i dekodowanie to to samo, czyli odkodować "coś" to trzeba zakodować jeszcze raz.

Tab[i] := Tab[i] xor $55;
0

Xor ma to do siebie, że jest "odwracalny". Przykład:

A xor B = C
A xor C = B
B xor C = A

Teraz kombinuj :)

0

Opis XOR.

0

Heh, też to sprawdzałem, ale coś nie chce się zdjęcie odtworzyć.
Ani jpg ani bmp. Przy pliku bmp jeszcze wyrzuca błąd: "Stream write error".

0

Spróbuj może w taki sposób, że każdy kolor piksela z obrazka będzie pobierało i jego wartość wstawiało do memo1 i obrazek będzie w ten sposób szyfrowany jako plik txt, a potem twój program będzie dekompilował ten tekst na obrazek.

jak chcesz to ci moge w tym pomóc [email protected]

0

Dzięki Misiekd za gotowca. Zapewne go uzyje. Pytanie tylko czy takie kodowanie jest dość bezpieczne i trudne do złamania przy haśle powiedzmy 10 znakowym??

Próbowałem też metody Piga87, ale obrazek z 6kb zamieniał się w 150kb. Dużo za dużo.

0

powiem tak - jeśli hasło jest tak samo długie lub dłuższe niż kodowany strumień to jest praktycznie nie do odkodowania bez hasła. Przy 10 znakowym jeśli nie kodujesz textu może być bardzo trudna. Jeśli natomiast ktoś będzie miał oryginał i zakodowany a nie będzie miał hasła (i będzie wiedział, że szyfrowane było XORem) to znalezienie hasła to kilka minut

0

chciałbym dalej pociągnąc ten temat. Tez pisze program szyfrujący obrazki i chce zrobić to tak żeby mój program nie musiał najpierw rozkodowac pliku i zapisać właściwego pliku.jpg tylko wczytywał ten zaszyfrowany pliczek i potem "w pamięci" go odkodował i pokazał. Da się tak?

0

da się - otwórz plik i dekoduj do TMemoryStream a potem wczytaj do np. Image'a ze streamu

0

Siema,
Korzystając z tematu, mam podobny problem, jak wgląda budowa plików bmp oraz jpeg?

0

próbowałem wspomnianego kodu z art. "xorowanie strumienia" działa w takiej formie jak jest ale chciałem zamiast zmiennych ze ścieżkami do plików dodać TOpenDialoga i jest mały problem. Niewiedzieć dlaczego kodowanie się zmienia. Tzn nie można już odwrócić ksorowania. Nie wiem dlaczego tak sie dzieje więc wrzucam zmieniony fragment kodu. Prosze o podpowiedzi.

procedure TForm1.Button1Click(Sender: TObject);
var
  InStream, OutStream: TFileStream;
  PassStream: TMemoryStream;
  XorStream: TXorStreamCipher;
  pass: string;
  scie_in,scie_out,sciezka:string;
begin
   scie_in:='obrazek.jpg';
pass:='jakiestamhaslo';
if OpenDialog1.Execute then
begin
   sciezka := OpenDialog1.FileName;
   scie_in:=sciezka;
end;
  InStream := TFileStream.Create(scie_in, fmOpenRead or fmShareExclusive);
  OutStream := TFileStream.Create(scie_out, fmCreate);
  PassStream := TMemoryStream.Create;
  XorStream := TXorStreamCipher.Create;
  try
    PassStream.Write(pass, Length(pass)); //można też np. wczytać z pliku
    XorStream.PassStream := PassStream;
    XorStream.InStream := InStream;
    XorStream.OutStream := OutStream;
    XorStream.Process;
  finally
    FreeAndNil(InStream);
    FreeAndNil(OutStream);
    FreeAndNil(PassStream);
    FreeAndNil(XorStream);
  end;
end;
0

haslo masz takie same w obu przypadkch?

0

tak hasło na pewno jest to samo. Jest tak, że jak przypisze scie_in i scie_out określone ścieżki to działa. Plik wyjściowy sxorowany jeszcze raz jest identyczny jak oryginał. natomiast jeśli zamiast scie_in dam opendialog1 tak jak w kodzie powyżej to już otrzymuje inaczej sxorowany plik którego potem nie da się "odwrócić". Nie rozumiem tego.

0

szyfrowanie jpg / bmp - wyjasnienie kodu plus źródła na
http://www.efg2.com/Lab/ImageProcessing/CryptImage.htm

pozdrawiam

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