Я пытаюсь вычислить значение SHA1 файла с помощью javascript. Файл находится в том же каталоге, что и index.html, и загружается с использованием ajax по имени, заданному в качестве параметра запроса.
например, вызов http://localhost:7070/index.html?file=file.zip должен рассчитать SHA1 для file.zip
Следующий код вычисляет SHA1 , но результат отличается от того, который я получаю, используя этот онлайн-инструмент с SHA1 и загружая файл http://onlinemd5.com/
$(document).ready(function(){
var file = utils.getUrlVars() && utils.getUrlVars().file;
if (!file) throw "error - no URL was found. set 'file' in query string.";
$.ajax({
url: file,
success: function(data){
var sha1= CryptoJS.SHA1(data).toString();
console.log('sha1 - success', sha1);
},
error: function(error){
console.log('ERROR');
}
})
});
В чем разница? Я предполагаю, что онлайн-инструмент вычисляет его правильно (и он также дает мне точный результат, который я получаю при вычислении с использованием кода Java), поэтому что-то в этом коде JS немного отличается.
Проблема определенно не в пакете CryptoJS, поскольку при вычислении строки hello с помощью скрипта генерируется следующий вывод:
sha1 - success aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
И с помощью онлайн-инструмента вы получите то же самое (в верхнем регистре):
AAF4C61DDCC5E8A2DABEDE0F3B482CD9AEA9434D
Проблема определенно заключается в формате данных после их загрузки или в способе их использования.
Когда я использую Java для вычисления SHA1, я получаю тот же результат, вычисляя его в массиве байтов файлов, поэтому это указывает на тот факт, что массив байтов, который я получаю с помощью этого скрипта, каким-то образом отличается / частично.
Content-Type: application/octet-stream
или нет? - person Mjh   schedule 22.09.2015var sha1= CryptoJS.SHA1(data).toString();
Я бы начал с регистрации и демонстрации того, чтоdata
иsha1
для известных (коротких) значений данных. - person AD7six   schedule 22.09.2015contentType
в$.ajax
устанавливает заголовок для запроса. Заголовок, о котором я спрашиваю, - это заголовок ответа. Ваши функции хеширования должны работать с одним и тем же двоичным содержимым, иначе вы получите другой результат хеширования.CryptoJS
определенно реализует хеширование правильно, так что это означает, что ошибка находится где-то в отправляющей / принимающей части, а не в самой библиотеке. - person Mjh   schedule 22.09.2015data
иsha1
. Вы, вероятно, обнаружите, чтоdata
делает < i> not соответствует содержимому файла - это будет означать, что проблема не в криптографической библиотеке, а в том, как вы получаете содержимое файла. - person AD7six   schedule 22.09.2015