2013-03-04 22 views
5

Attualmente sto provando a cancellare un'immagine dal mio browser usando javascript. Tuttavia, ho eseguito il hashing di una stringa del dataURL o dei dati di pixel che ho recuperato dall'elemento canvas in HTML. Questo ovviamente non è lo stesso di hashing dei dati grezzi dell'immagine, che è quello che vorrei fare.Hashing un'immagine in Javascript

Ad esempio i dati che verrebbero utilizzati per la stessa immagine nella funzione di file hash php.

Qualcuno sa come posso accedere a questi dati di immagine grezza utilizzando javascript per ottenere un valore hash che sarebbe equivalente all'hash risultato ottenuto da PHP hash_file ($ file)?

Grazie!

+0

In che modo i "dati grezzi dell'immagine" non sono i "dati pixel"? Ovviamente, i dati dell'immagine non sono file. – Bergi

+0

I dati grezzi che sto cercando sono 0 e 1, dove i dati dei pixel sono una stringa di numeri composta da numeri da 0 a 255 (se non mi sbaglio nell'intervallo). Sospetto che la funzione in PHP funzioni con gli 0 e gli 1, non con i valori 0-255 concatenati insieme. –

+0

Cosa intendi con "stringa di numeri"? Hai una stringa contenente dati binari o una matrice di byte? – GJK

risposta

4

È possibile ottenere i dati grezzi di un'immagine con una richiesta XHR a quella posizione del file di immagine.

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(); 

Successivamente, è possibile utilizzare qualsiasi algoritmo di hashing che si desidera. Ecco una libreria di loro: https://code.google.com/p/crypto-js/

+0

Ah, questa risposta serve allo scopo ma per motivi di sicurezza spero di avere tutto il lato client, indipendente da qualsiasi server e che funzioni solo con l'elemento immagine nel browser. –

+0

Stai già acquisendo il file immagine da un server, giusto? Questo lo sta solo riprendendo. Dove stai caricando l'immagine da cui non puoi caricarla di nuovo? Altrimenti, cosa c'è di sbagliato nella soluzione canvas + dataURL che probabilmente hai incontrato? – MattDiamant

+0

Io sono, il problema con questo è solo una maggiore sicurezza. Per esempio se sto cercando di firmare digitalmente questa immagine, i dati di byte che sto facendo affidamento sul server per inviarmi correttamente sono suscettibili di alterazioni (supponendo http, no ssl). Mi piacerebbe firmare l'immagine che vedo, per davvero firmare ciò che vedo. EDIT: Tuttavia, se questo può anche ricaricare l'immagine nel browser in base ai dati che ricevo, allora funzionerebbe. –