Как я получил бы Значение хэш-функции пользовательского файла с JavaScript или Flash?

Как-то так?

var str = "https://example.com/app?#mElem1=mAcct1&#mElem2=mAcct2&#mElem4=mAcct5"
function dropHash(str) {
  if (str.indexOf("#") ==-1) return str;
  var arr = str.split("#");
  arr.pop();
  return arr.join("#");
}

console.log(str);
str = dropHash(str)
console.log(str);
str = dropHash(str)
console.log(str);
str = dropHash(str)
console.log(str);

Или у вас просто кнопка заменяет хэш?

[119 ]
var url = new URL("https://example.com/app")
console.log(url);
url.hash="mElem2=mAcct2"
console.log(url);
url.hash="mElem3=mAcct3"
console.log(url);

5
задан Stephen Belanger 12 February 2009 в 00:19
поделиться

5 ответов

Можно сделать это с Flash, при условии, что у пользователя есть Flash Player 10.

Вот учебное руководство

Также: Чтение и запись локальных файлов в FP10

5
ответ дан 14 December 2019 в 19:27
поделиться

Это не возможно с JavaScript из-за нет никакого доступа к файловой системе. Я знаю, что это может быть сделано с Silverlight. Возможно, кто-то с опытом флэш-памяти может ответить.

0
ответ дан 14 December 2019 в 19:27
поделиться

Это традиционно не возможно с JavaScript, но это может быть, если спецификация Загрузки Файла W3 когда-нибудь завоевывает популярность.

Вариант доступен в Firefox 3:

var content= input.files[0].getAsBinary();

Для других браузеров необходимо было бы отступить к хешированию серверной стороны и/или Flash.

Вот является премия реализацией JS SHA-1 для Вас:

function sha_hexdigest(bytes) {
  var digest= sha_bytes(sha_calculate(sha_ints(bytes), bytes.length*8));
  var digits= '0123456789abcdef';
  var hex= '';
  for (var i= 0; i<digest.length; i++) {
    var c= digest.charCodeAt(i);
    hex+= digits.charAt((c>>4)&0xF) + digits.charAt(c&0xF);
  }
  return hex;
}

function sha_ints(bytes) {
  while (bytes.length%4!=0)
    bytes+= '\x00';
  var ints= new Array();
  for (var i= 0; i<bytes.length; i+= 4) {
    ints[ints.length]= (
      (bytes.charCodeAt(i)&0xFF)<<24 | (bytes.charCodeAt(i+1)&0xFF)<<16 |
      (bytes.charCodeAt(i+2)&0xFF)<<8 | (bytes.charCodeAt(i+3)&0xFF)
    ); }
  return ints;
}

function sha_bytes(ints) {
  var bytes= '';
  for (var i= 0; i<ints.length; i++)
    bytes+= String.fromCharCode((ints[i]>>24)&0xFF, (ints[i]>>16)&0xFF, (ints[i]>>8)&0xFF, ints[i]&0xFF)
  return bytes;
}

function sha_calculate(ints, bitn) {
  while (ints.length*32<=bitn) ints[ints.length]= 0;
  ints[ints.length-1]|= 1<<(31-bitn%32)
  while (ints.length%16!=14) ints[ints.length]= 0;
  ints[ints.length]= Math.floor(bitn/0x100000000);
  ints[ints.length]= bitn&0xFFFFFFFF;

  var h0= 1732584193, h1= -271733879, h2= -1732584194, h3= 271733878, h4= -1009589776;
  var a, b, c, d, e, f, k, temp, w= new Array(80);
  for(var inti= 0; inti<ints.length; inti+= 16) {
    a= h0; b= h1; c= h2; d= h3; e= h4;
    for (var i= 0; i<16; i++) w[i]= ints[inti+i];
    for (; i<80; i++) w[i]= sha_rol(w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16], 1);

    for(var i= 0; i<80; i++) {
      switch (Math.floor(i/20)) {
        case 0: f= sha_add(1518500249, (b & c) | ((~b) & d)); break;
        case 1: f= sha_add(1859775393, b ^ c ^ d); break;
        case 2: f= sha_add(-1894007588, (b & c) | (b & d) | (c & d)); break;
        case 3: f= sha_add(-899497514, b ^ c ^ d); break;
      }
      temp= sha_add( sha_add(sha_rol(a, 5), w[i]), sha_add(e, f) );
      e= d; d= c; c= b; b= a; a= temp;
      c= sha_rol(c, 30);
    }

    h0= sha_add(h0, a); h1= sha_add(h1, b); h2= sha_add(h2, c); h3= sha_add(h3, d); h4= sha_add(h4, e);
  }
  return new Array(h0, h1, h2, h3, h4);
}

function sha_add(a, b) {
  var lsw= (a&0xFFFF) + (b&0xFFFF);
  var msw= (a>>16) + (b>>16) + (lsw>>16);
  return (msw<<16) | (lsw&0xFFFF);
}

function sha_rol(n, bits) {
  return (n<<bits) | (n>>>(32-bits));
}
2
ответ дан 14 December 2019 в 19:27
поделиться

Браузеры (т.е. JavaScript) не могут получить доступ к локальной файловой системе, период. Если бы они могли, это быть кошмаром безопасности.

-3
ответ дан 14 December 2019 в 19:27
поделиться

Используя HTML5 File API, вы можете читать файлы на локальном компьютере, ознакомьтесь с моим решением: Генерация контрольной суммы файла SHA1 с использованием файлового API HTML5 в Javascript

1
ответ дан 14 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: