2013-11-28 5 views
3

md5sum linux 명령과 CryptoJS의 MD5 메서드를 사용할 때 동일한 값을 생성하는 tar 파일의 md5sum을 가져 오려고합니다.Crypto.js를 통해 파일의 md5sum 가져 오기

자바 스크립트에서 내가 할 (파일이 HTML 형식에 넣어 후) :

var reader = new FileReader(); 

reader.onloadend = function() { 
    text = (reader.result); 
} 

reader.readAsBinaryString(document.getElementById("firmware_firmware").files[0]); 

var hash = CryptoJS.MD5(text); 

hash.toString(); 

를 리눅스에서 내가 할 :

md5sum name_of_file.tar 

는 현재이 두 다른 결과를 생성합니다. md5sum이 리눅스에서와 같은 방식으로 tar 파일의 내용을 MD5ed로 가져 오기 위해 JavaScript를 어떻게 얻을 수 있습니까?

간단한 문자열의 경우 md5sum과 CryptoJS가 동일한 값을 생성합니다.

편집 : 내용이 "Fred"인 Fred.txt라는 파일로 md5sum과 CryptoJS가 같은 값을 생성합니다 : c624decb46fa3d60e824389311b252f6. update.tar 파일에

는 리눅스에 대한 md5sum이 나에게 제공합니다 1f046eedb7d8279953d233e590830e4f을 CryptoJS에 나에게 제공합니다 f0c3730e5a9863cffa0ba3fadd531788

Edit2가를 : 추가 시험이 문제로 인해 같은 7을 큰 파일 크기를 실제로 보여줍니다 MegaBytes

+1

둘 모두의 결과물을 보여줄 수 있습니까? 'readAsBinaryString (.....)'이 파일 내용이 아닌 파일명을 해싱하는 것이 가능한가? – DanFromGermany

+0

답장을 보내 주셔서 감사합니다. 간단한 문자열을 사용하여 간단한 txt 파일로 테스트했습니다. md5sum은 리눅스에서, CryptoJS는 같은 결과를냅니다. 출력에서 편집합니다. – tblakey89

+0

또한 CryptoJS.MD5()에서이 문제에 직면했으며 정확한 md5를 제공하는 Paul Johnston의 또 다른 기능을 발견했습니다. 당신은 온라인으로 그것을 테스트 할 수 있습니다. http://plink.link/39cc83f38263adee5bc655f11fbcefab/html – moldcraft

답변

4

JavaScript의 모든 문자열 (실제로 "바이너리 문자열")은 실제로는 UTF-16 문자입니다. "2 진. 자열"은 처음 256 코드 점만 사용하도록 선택하는 것입니다. Latin-1 인코딩은 정확히 첫 번째 256 코드 포인트를 사용하기 때문에 Latin-1을 사용하여 문자열을 바이트로 변환 할 수 있습니다.

var hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(text)); 
0

파일 업로드가 100 % 완료되기 전에 파일로드가 완료되지 않고 해시가 만들어지기 때문에 이것이라고 생각합니다. 해시를 onloadend 이벤트로 이동해보십시오.

var reader = new FileReader(); 

reader.onloadend = function() { 
    var hash = CryptoJS.MD5(reader.result); 
    hash.toString(); 
} 

reader.readAsBinaryString(document.getElementById("firmware_firmware").files[0]); 
+0

답변을 주셔서 감사합니다. 시도했지만 작동하지 않았습니다. 그래도 고마워. 추가 테스트를 통해 파일 크기가 몇 메가 바이트 인 경우에만 다른 결과가 나타납니다. 그래서 아마 올바른 라인을 따라, 이것은 나의 로컬 머신에 있고, 클라이언트 측에서 수행되고 있기 때문에 업로드는 정말로 문제가 될 수 있습니까? – tblakey89

+0

'php.ini' -'max_post_size' 또는'max_upload_size' 또는 그와 같은 것에 의한 제한 때문일 수도 있습니다. 파일이 100 % 업로드되면 해시는 모든 라이브러리와 동일합니다. (PHP를 사용하는 경우) – DanFromGermany