2016-06-18 8 views
0

Я пытаюсь получить контрольную сумму/хэш из файла, загружаемого на мою веб-страницу.Как вычислить контрольную сумму файла в браузере и получить те же результаты, что и из командной строки Windows

В настоящее время я могу загрузить файл через свой браузер, а затем вычислить хеш с помощью библиотеки crypto node.js. Я сначала конвертирую blob в url данных.

export function calculateHash(dataUrl, type){ 

    const sha1sum = crypto.createHash('sha1').update(dataUrl).digest("hex"); 
    console.log('Hash sum is ' + sha1sum); 

} 

Результат: 66b8bdd2d1d49f708722c15b26409bc072096697

Когда я вычислить хеш вручную из окна командной строки, используя следующую команду ..

fciv.exe 1_1.wav -sha1 

Результат: b06071b13a1b50cd2976ed7bb4180f6963e8db8e

I был бы e, чтобы получить тот же контрольный результат из URL-адреса данных в моем браузере, как выполнить ручную проверку из командной строки.

Возможно ли это?

+0

код, который вы представили здесь с криптографическим модулем Node.js. Это не имеет никакого отношения к браузеру или [cryptojs]! Поскольку это, кажется, код сервера, как вы называете свою функцию 'calculateHash'? Какие входы в эту функцию? Можете привести несколько примеров? Это в основном тот же комментарий, что и [комментарий] (http://stackoverflow.com/questions/37849779/how-to-calculate-the-sha1-hash-of-a-blob-using-node-js-crypto# comment63194752_37849779) на ваш предыдущий вопрос. –

+0

Код Node.js запускается на сервере и только взаимодействует с браузером через запросы. Какие просьбы вы используете? Вы читали [В чем разница между клиентским и серверным программированием?] (Http://stackoverflow.com/q/13840429/1816580) –

ответ

2

A URL-адрес данных выглядит как data:image/png;base64,<BASE-64 DATA>. Вам нужно будет извлечь часть BASE-64 DATA, декодировать base64 и затем запустить ваш алгоритм хеширования. Или - если вы хотите, чтобы выполнить хэширование в браузере - используйте FileReader API:

function calculateHash(file, callback) { 
 
    let reader = new FileReader(); 
 
    reader.onload = function(event) { 
 
    let file_sha1 = sha1(reader.result); 
 
    callback(file_sha1); 
 
    }; 
 
    reader.readAsArrayBuffer(file); 
 
} 
 

 
let input = document.getElementById("input-file"), 
 
    info = document.getElementById("info"); 
 

 
input.addEventListener("change", function(event) { 
 
    let file = input.files[0]; 
 
    
 
    if (file) { 
 
    calculateHash(file, function(file_sha1) { 
 
     info.textContent = file_sha1; 
 
    }); 
 
    } 
 
});
<script src="https://raw.githubusercontent.com/emn178/js-sha1/master/build/sha1.min.js"></script> 
 

 
<input id="input-file" type="file"> 
 
<div id="info"></div>

Требуется js-sha1 (npm install js-sha1).

Кредит: How to checksum the file to be uploaded with javascript?

+0

вы можете объяснить, что делать здесь: reader.onload = function (событие) { var contents = event.target.result; // Хеш ваше содержание здесь ... info.textContent = contents; } – user1526912

+0

* «Я хотел бы получить тот же результат контрольной суммы из URL-адреса данных в своем браузере» * - мой ответ: не используйте URL-адрес данных, а содержимое файла, чтобы получить контрольную сумму в вашем браузере. Вам нужно будет подключить генератор hashsum sha1, где есть комментарий, хеширование 'content'. –

+0

Isnt event.target.result так же, как и URL-адрес данных? Что вы имеете в виду, используя содержимое файла ... какую часть файла blob мне следует использовать ... извините, но я новичок – user1526912