2013-03-04 10 views
5

Obecnie próbuję hash obrazu z przeglądarki przy użyciu javascript. Jednak już hashing ciąg danychURL lub dane pikseli, które zostały pobieranie z elementu canvas w HTML. To oczywiście nie to samo co mieszanie surowych danych obrazu, co chciałbym robić.Hashing obrazu w JavaScript

Na przykład dane, które będą używane dla tego samego obrazu w funkcji pliku skrótu php.

Czy ktoś wie, w jaki sposób mogę uzyskać dostęp do tego surowego obrazu przy użyciu javascript, aby uzyskać wartość skrótu, która byłaby równoważna wynikowemu hashowi uzyskanemu z PHP hash_file (plik $)?

Dzięki!

+0

W jaki sposób "nieprzetworzone dane obrazu" nie są "danymi pikselowymi"? Oczywiście dane obrazu nie są plikami. – Bergi

+0

Surowe dane, których szukam, to 0 i 1, gdzie jako dane pikselowe jest ciągiem liczb składających się z cyfr od 0-255 (jeśli się nie mylę w zakresie). Podejrzewam, że funkcja w PHP działa z wartościami 0 i 1, a nie 0-255 połączonymi ze sobą. –

+0

Co masz na myśli "ciąg liczb"? Czy masz ciąg zawierający dane binarne lub tablicę bajtów? – GJK

Odpowiedz

4

Można uzyskać nieprzetworzone dane obrazu za pomocą żądania XHR do tego położenia pliku obrazu.

var xhr = new XMLHttpRequest(); 
xhr.open('GET', '/my/image/file.png', true); 
xhr.responseType = 'arraybuffer'; // this will accept the response as an ArrayBuffer 
xhr.onload = function(buffer) { 
    var words = new Uint32Array(buffer), 
     hex = ''; 
    for (var i = 0; i < words.length; i++) { 
     hex += words.get(i).toString(16); // this will convert it to a 4byte hex string 
    } 
    console.log(hex); 
}; 
xhr.send(); 

Po tym możesz użyć dowolnego algorytmu mieszającego, który chcesz. Oto ich biblioteka: https://code.google.com/p/crypto-js/

+0

Ach, ta odpowiedź służy temu celowi, ale ze względów bezpieczeństwa mam nadzieję, że wszystko zostanie wykonane po stronie klienta, niezależnie od serwera i działa tylko z elementem obrazu w przeglądarce. –

+0

Już chwytasz plik obrazu z serwera, prawda? To jest po prostu chwytanie go ponownie. Gdzie ładujesz obraz, z którego nie możesz go załadować ponownie? W przeciwnym razie, co jest nie tak z rozwiązaniem canvas + dataURL, które prawdopodobnie napotkasz? – MattDiamant

+0

Jestem, problem z tym jest po prostu dodane bezpieczeństwa. Na przykład, jeśli chcę cyfrowo podpisać ten obraz, dane bajtowe, na których polegam na serwerze, aby poprawnie wysłać do mnie dane, są podatne na zmiany (zakładając http, nie ssl). Chciałbym podpisać obraz, który widzę, aby naprawdę podpisać to, co widzę. EDYCJA: Jeśli jednak może to również przeładować obraz w przeglądarce zgodnie z danymi, które otrzymuję, wtedy to by faktycznie działało. –

Powiązane problemy