2013-03-04 3 views
5

J'ai actuellement essayé de hacher une image de mon navigateur en utilisant javascript. Cependant, j'ai haché une chaîne de dataURL ou les données de pixels que j'ai récupérées de l'élément canvas en HTML. Ce n'est évidemment pas la même chose que de hacher les données brutes de l'image, ce que je voudrais faire.Hacher une image en Javascript

Par exemple les données qui seraient utilisées pour la même image dans la fonction de fichier de hachage php.

Est-ce que quelqu'un sait comment je peux accéder à ces données d'image brutes en utilisant javascript pour obtenir une valeur de hachage qui serait équivalente au résultat obtenu par hash_file PHP ($ file)?

Merci!

+0

Comment les "données brutes de l'image" ne sont pas les "données de pixel"? Bien sûr, les données d'image ne sont aucun fichier. – Bergi

+0

Les données brutes que je recherche sont 0 et 1 où les données de pixel sont une chaîne de nombres composée de nombres de 0 à 255 (si je ne me trompe pas sur la plage). Je soupçonne que la fonction PHP fonctionne avec les 0 et les 1, et non les valeurs 0-255 concaténées ensemble. –

+0

Que voulez-vous dire "chaîne de nombres"? Avez-vous une chaîne contenant des données binaires ou un tableau d'octets? – GJK

Répondre

4

Vous pouvez obtenir les données brutes d'une image avec une demande XHR à cet emplacement de fichier image.

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

Ensuite, vous pouvez utiliser n'importe quel algorithme de hachage que vous souhaitez. Voici une bibliothèque d'entre eux: https://code.google.com/p/crypto-js/

+0

Ah, cette réponse sert le but, mais pour des raisons de sécurité, j'espère avoir tout fait côté client, indépendant de tout serveur et ne travaillant qu'avec l'élément image dans le navigateur. –

+0

Vous saisissez déjà le fichier image d'un serveur, n'est-ce pas? C'est juste de le saisir à nouveau. Où chargez-vous l'image à partir de laquelle vous ne pouvez plus la charger? Sinon, quel est le problème avec la solution canvas + dataURL que vous avez probablement rencontrée? – MattDiamant

+0

Je suis, le problème avec ceci est juste ajouté la sécurité. Par exemple, si je cherche à signer numériquement cette image, les données d'octets que je compte sur le serveur pour me renvoyer correctement sont susceptibles d'être modifiées (en supposant que http, no ssl). J'aimerais signer l'image que je vois, pour vraiment signer ce que je vois. EDIT: Cependant, si cela peut également recharger l'image dans le navigateur en fonction des données que je reçois, cela fonctionnera. –