2013-03-04 3 views
5

자바 스크립트를 사용하여 브라우저에서 이미지를 해시하려고합니다. 그러나 HTML의 canvas 요소에서 가져온 dataURL 또는 픽셀 데이터의 문자열을 해싱했습니다. 이것은 분명히 내가 원했던 이미지의 원시 데이터를 해싱하는 것과 동일하지 않습니다.자바 스크립트로 이미지 해싱

예를 들어, PHP 해시 파일 기능에서 동일한 이미지에 사용되는 데이터.

누구나 자바 스크립트를 사용하여이 원시 이미지 데이터에 액세스하여 어떻게 PHP 해시 파일 ($ 파일)에서 얻은 결과 해시와 동일한 해시 값을 얻을 수 있는지 알 수 있습니까?

감사합니다.

+0

"이미지의 원시 데이터"는 "픽셀 데이터"가 아닌 방법은 무엇입니까? 물론 이미지 데이터는 파일이 아닙니다. – Bergi

+0

내가 찾는 원시 데이터는 0과 1입니다. 여기서 픽셀 데이터는 0-255의 숫자로 구성된 문자열입니다 (범위에서 오인되지 않은 경우). PHP에서 함수가 함께 0-255 값을 0 및 1 함께 작동하는 것으로 의심됩니다. –

+0

"숫자의 문자열"이란 무엇입니까? 바이너리 데이터 또는 바이트 배열을 포함하는 문자열이 있습니까? – GJK

답변

4

XHR 요청이있는 이미지의 원시 데이터를 해당 이미지 파일 위치로 가져올 수 있습니다.

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

그런 다음 원하는 모든 해싱 알고리즘을 사용할 수 있습니다. 다음은 그 라이브러리입니다. https://code.google.com/p/crypto-js/

+0

아,이 응답은 목적을 달성하지만 보안 목적으로 모든 서버를 독립적으로하고 브라우저의 이미지 요소로만 작업하기를 바라고 있습니다. –

+0

이미 서버에서 이미지 파일을 가져 오는 중입니다. 이것은 단지 그것을 다시 붙잡고있는 중이다. 이미지를로드하는 중 어디에서 다시로드 할 수 없습니까? 그렇지 않으면, 당신이 아마 왔던 canvas + dataURL 솔루션의 문제점은 무엇입니까? – MattDiamant

+0

나는이 문제가 방금 보안을 추가했습니다. 예를 들어이 이미지에 디지털 서명을하려는 경우 올바르게 서버로 되돌려 보내야하는 바이트 데이터가 변경 될 수 있습니다 (http, no ssl이라고 가정). 내가 본 이미지에 서명하고 싶습니다. 내가 보는 것을 진정으로 서명하고 싶습니다. 편집 : 그러나 내가받은 데이터에 따라 브라우저에서 이미지를 다시로드 할 수 있으면 실제로 작동합니다. –

관련 문제