<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: Контрольная сумма, хэш и т.д.]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=8068</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8068&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: Контрольная сумма, хэш и т.д.».]]></description>
		<lastBuildDate>Tue, 04 Sep 2018 08:05:42 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=128473#p128473</link>
			<description><![CDATA[<p>А вариант с использованием <strong>System.Security.Cryptography</strong> не подходит ?</p><p><a href="https://stackoverflow.com/questions/10198690/how-to-generate-md5-using-vbscript-in-classic-asp">https://stackoverflow.com/questions/101 … lassic-asp</a><br /><a href="https://en.wikibooks.org/wiki/Visual_Basic_for_Applications/String_Hashing_in_VBA">https://en.wikibooks.org/wiki/Visual_Ba … ing_in_VBA</a></p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Tue, 04 Sep 2018 08:05:42 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=128473#p128473</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=126891#p126891</link>
			<description><![CDATA[<p>\</p>]]></description>
			<author><![CDATA[null@example.com (Yurachb)]]></author>
			<pubDate>Mon, 09 Jul 2018 15:59:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=126891#p126891</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74892#p74892</link>
			<description><![CDATA[<p>Коллега <strong>VitAliS</strong> обратил внимание на утилиту <a href="http://forum.script-coding.com/viewtopic.php?id=8594">certutil</a>, и, хотя сделал он это по несколько совсем другому поводу, всё равно спасибо ему большое. Правда, к той задаче, по ходу решения которой создавалась эта тема, я в ближайшее время не вернусь, но, тем не менее, набросал себе на память:</p><div class="codebox"><pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;package&gt;
  &lt;job id=&quot;help&quot; version=&quot;0.81&quot;&gt;
    &lt;script type=&quot;text/jscript&quot; language=&quot;JScript&quot;&gt;
      WScript.Arguments.ShowUsage();
    &lt;/script&gt;
    &lt;runtime&gt;&lt;description&gt;Hash-to-Name&lt;/description&gt;&lt;example&gt; — эта справка
    wscript //job:run hash2name.wsf [HA] file/folder [file/folder...]
    HA: /SHA1, /SHA256, /SHA384, /SHA512, /MD2, /MD4, /MD5
        добавить к имени файла контрольную сумму,
        вычисленную по соответствующему алгоритму
    wscript //job:run hash2name.wsf /clear file/folder [file/folder...]
        удалить контрольную сумму из имени файла&lt;/example&gt;
    &lt;/runtime&gt;
  &lt;/job&gt;
  &lt;job id=&quot;run&quot; version=&quot;0.7&quot;&gt;
    &lt;object id=&quot;f&quot; progid=&quot;Scripting.FileSystemObject&quot; /&gt;
    &lt;object id=&quot;s&quot; progid=&quot;WScript.Shell&quot; /&gt;
    &lt;script type=&quot;text/jscript&quot; language=&quot;JScript&quot;&gt;&lt;![CDATA[

      var a;    // HashAlgorithm

      if(WScript.Arguments.length){
        switch(WScript.Arguments(0).toUpperCase()){
         case &#039;/SHA1&#039;:a=&#039;SHA1&#039;;break;
         case &#039;/SHA256&#039;:a=&#039;SHA256&#039;;break;
         case &#039;/SHA384&#039;:a=&#039;SHA384&#039;;break;
         case &#039;/SHA512&#039;:a=&#039;SHA512&#039;;break;
         case &#039;/MD2&#039;:a=&#039;MD2&#039;;break;
         case &#039;/MD4&#039;:a=&#039;MD4&#039;;break;
         case &#039;/MD5&#039;:a=&#039;MD5&#039;;break;
         case &#039;/CLEAR&#039;:a=&#039;0&#039;;break;
         default:fc();
        }
        for(var i=1;i&lt;WScript.Arguments.length;i++){
          fa(WScript.Arguments(i));
        }
      }else fc();

      function fa(e){
        if(f.FolderExists(e)){
          with(new Enumerator(f.GetFolder(e).subFolders)){
            while(!atEnd()){
              fa(item().path);
              moveNext();
            }
          }
          with(new Enumerator(f.GetFolder(e).files)){
            while(!atEnd()){
              fb(item().path);
              moveNext();
            }
          }
        }else if(f.FileExists(e))fb(f.getFile(e).path);
      }

      function fb(e){
        s.run(&#039;cscript //job:exec &quot;&#039;+WScript.scriptFullName+&#039;&quot; &#039;+a+&#039; &quot;&#039;+e+&#039;&quot;&#039;,0,true);
      }

      function fc(){
        s.run(WScript.scriptFullName);
        WScript.quit();
      }

    ]]&gt;&lt;/script&gt;
  &lt;/job&gt;
  &lt;job id=&quot;exec&quot; version=&quot;0.4&quot;&gt;
    &lt;object id=&quot;f&quot; progid=&quot;Scripting.FileSystemObject&quot; /&gt;
    &lt;object id=&quot;s&quot; progid=&quot;WScript.Shell&quot; /&gt;
    &lt;script type=&quot;text/jscript&quot; language=&quot;JScript&quot;&gt;&lt;![CDATA[

      var
       a,
       b=f.getFile(WScript.Arguments(1)),
       c=f.getBaseName(b).replace(/\s*\[((SHA)|(MD))\d{1,3}\s*[a-fA-F0-9]+\]$/i,&#039;&#039;);

      if(WScript.Arguments(0)!=&#039;0&#039;){
        with(s.exec(&#039;CertUtil -hashfile &quot;&#039;+b.path+&#039;&quot; &#039;+WScript.Arguments(0)).stdOut){
          skipLine();
          a=readLine().replace(/\s/g,&#039;&#039;);
        }b.name=c+&#039; [&#039;+WScript.Arguments(0)+&#039; &#039;+a+&#039;].&#039;+f.getExtensionName(b);
      }else b.name=c+&#039;.&#039;+f.getExtensionName(b);

    ]]&gt;&lt;/script&gt;
  &lt;/job&gt;
&lt;/package&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Fri, 23 Aug 2013 20:44:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74892#p74892</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69562#p69562</link>
			<description><![CDATA[<p><strong>YMP</strong>: а как из этого массива в массиве получить доступ к байту? Брутальное vFile[0][0] не прокатило (да я и надеялся...), vFile[0].length - null или не является объектом.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 16 Feb 2013 14:47:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69562#p69562</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69558#p69558</link>
			<description><![CDATA[<div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>Тип элементов массива - unknown, поэтому JS не считает это ни строкой (никакие методы для строк не работают), ни чилом - арифметика тоже не пашет.</p></blockquote></div><p>Фактически vFile[0] возвращает тип VT_ARRAY | VT_UI1, содержащий указатель на структуру SAFEARRAY, а в ней лежит указатель на байт. Т.е. получается, что каждый байт содержится в своём персональном массиве размером в один элемент.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sat, 16 Feb 2013 12:47:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69558#p69558</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69556#p69556</link>
			<description><![CDATA[<p>Свою проблему я решил с помощью костылей и протезов, просто пара замечаний по предыдущим постам:<br />1. При чтении бинарника с помощью ADODB.Stream type=1 быстрее всего получается, если &quot;порция&quot; равна размеру блока на устройстве. В моём случае read(8192) - для флэхи и read(4096) - для HDD. Что, в общем, логично.<br />2. Массив байтов я получил (кривовато и медленно, но получил):</p><div class="codebox"><pre><code>var vFile=[];
with(new ActiveXObject(&#039;ADODB.Stream&#039;)){
  type=1;
  open(),loadFromFile(&#039;test&#039;);
// test - имя файлика (без расширения) для экспериментов
// лежит в папке скрипта, размер 20-30 байт, чтобы пошустрее,
// создаётся в hex редакторе, чтобы разные комбинации проверять
  while(!EOS)vFile.push(read(1));
  close();
}
WScript.echo(typeof(vFile[0]));</code></pre></div><p>Забавно то, что дальше этот массив средствами JS я обработать не смог. Тип элементов массива - unknown, поэтому JS не считает это ни строкой (никакие методы для строк не работают), ни чилом - арифметика тоже не пашет. По echo пытается показать соответствующий символ, но, если байт из диапазона 0x7f - 0x9f, не показывает ничего...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 16 Feb 2013 09:20:26 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69556#p69556</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69405#p69405</link>
			<description><![CDATA[<p>[off]<br />На глаз - с десяток бинарников (.exe, .dll, ...) в свежеустановленной винде имеют реализации подобных алгоритмов (мне же всё равно, какой именно алгоритм). И, блин, из скриптов они недоступны! Видимо, вся безопасность сразу накроется медным тазом, если я узнаю контрольную сумму какого-нибудь файла.<br />[/off]</p><p>Может, где написано, что так нельзя? Я бы и не мучился. На MSDN и у них же в social ничего не обнаружил. Если там кто-нибудь зарегистрирован, задали бы вопрос...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 12 Feb 2013 17:39:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69405#p69405</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69402#p69402</link>
			<description><![CDATA[<p>Пока не уверен в закономерности, но на W7Pro x32 - работает, на x64 - действительно работает в WScript&#039;32 (сам не догадался, думал - не работает), а вот на домашних (васик и премиум) - нет. Нет, говорит, такого скриптабельного объекта. Пробовал создавать System.Security.Cryptography.MD5CryptoServiceProvider, объект, вроде, создаётся, но не помнит собственных методов: по typeof говорит &quot;обжект&quot;, а методы не поддерживает.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 12 Feb 2013 17:24:23 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69402#p69402</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69394#p69394</link>
			<description><![CDATA[<p>А у меня создаётся, но только если запускать скрипт 32-битной версией WScript (которая в SysWOW64). Видимо, класс существует только в 32-битном варианте.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 12 Feb 2013 14:03:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69394#p69394</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69392#p69392</link>
			<description><![CDATA[<p>Опа! На семёрке объект CAPICOM.HashedData не создаётся. Т.е. стабильного способа получения контрольной суммы / хэша файла из скрипта в винде, похоже, нет. Прийдётся посмотреть на консольные утилиты...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 12 Feb 2013 13:53:43 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69392#p69392</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69355#p69355</link>
			<description><![CDATA[<p>Ну просто безразмерное спасибо.<br />Вот что получилось:</p><div class="codebox"><pre><code>function hash(algorithm,file){
  var
   objHashedData=WScript.createObject(&#039;CAPICOM.HashedData&#039;),
   strAlgorithm,
   begin,
   end,
   time;

  objHashedData.algorithm=algorithm;

  switch(algorithm){
// алгоритмы упорядочены по быстродействию:
// MD4 — самый быстрый, MD2 — неприлично медленный
   case 2:strAlgorithm=&#039;MD4&#039;;break;    
   case 3:strAlgorithm=&#039;MD5&#039;;break;    
   case 0:strAlgorithm=&#039;SHA1&#039;;break;    
   case 4:strAlgorithm=&#039;SHA 256&#039;;break;    
   case 5:strAlgorithm=&#039;SHA 384&#039;;break;    
   case 6:strAlgorithm=&#039;SHA 512&#039;;break;    
   case 1:strAlgorithm=&#039;MD2&#039;;break;    
  }

  begin=new Date();

  with(new ActiveXObject(&#039;ADODB.Stream&#039;)){
    type=1;
    open();
    loadFromFile(file);
    while(!EOS)objHashedData.hash(read(1024));
    close();
  }

  end=new Date();
  time=end-begin;

  return(strAlgorithm+&#039; Hash: [&#039;+objHashedData.Value+&#039;]\n&#039;+time);
}

WScript.echo(hash(2,&#039;C:\\Windows\\System32\\MRT.exe&#039;));</code></pre></div><p>Получается - самый быстрый алгоритм - MD4, его и буду использовать...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Mon, 11 Feb 2013 10:33:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69355#p69355</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69350#p69350</link>
			<description><![CDATA[<p>Как-то так (не проверялось):<br /></p><div class="codebox"><pre><code>while (!EOS) {
    objHashedData.Hash(Read(1024));
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 11 Feb 2013 08:23:30 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69350#p69350</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69349#p69349</link>
			<description><![CDATA[<p>Мда. То, что доктор прописал. И работает, вроде, шустро. Ещё раз огромное спасибо.<br />Надеюсь, полученая в ходе самостоятельных поисков информация хотя бы расширит мой кругозор...</p><p>Ещё один вопрос: хотел перевести пример на JScript, но наткнулся на незнакомую конструкцию (наверное, это смешно, но я бейсика не знаю и с такой конструкцией ранее не встречался)</p><div class="codebox"><pre><code>var
 objHashedData=WScript.createObject(&quot;CAPICOM.HashedData&quot;),
 objStream=WScript.createObject(&quot;ADODB.Stream&quot;);
objHashedData.Algorithm=3;
// SHA1    = 0
// MD2     = 1
// MD4     = 2
// MD5     = 3
// SHA 256 = 4
// SHA 384 = 5
// SHA 512 = 6

with(objStream){
  type=1;
  open();
  loadFromFile(&quot;Path\fileName.ext&quot;);

//    Следующий код надо перевести на JS:

//    Do Until .EOS
//        objHashedData.Hash .Read(1024)
//    Loop

  close();
}

WScript.echo(&quot;MD5 Hash: [&quot; &amp; objHashedData.Value &amp; &quot;]&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Mon, 11 Feb 2013 08:08:35 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69349#p69349</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69343#p69343</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?id=4086">VBScript: Вычисление хэша MD5 файла</a>.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sun, 10 Feb 2013 21:36:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69343#p69343</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: Контрольная сумма, хэш и т.д.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=69342#p69342</link>
			<description><![CDATA[<p>Возможно, я в очередной раз изобретаю велосипед, но два выходных, проведенных в гугле, яндексе и MSDN, вынуждают обратиться за помощью. Суть проблемы: необходимо из скрипта, по возможности быстро, получить некий уникальный идентификатор файла. CRCx, MDx, SHAx - всё равно. Можно даже что-нибудь экзотическое. Совместимость с чем-либо не интересует. Главное:<br />1. идентификатор должен измениться при любом изменении файла (маловероятные случаи с заменой всего содержимого файла на другое, но имеющее тот же хэш - не рассматриваем);<br />2. идентификатор должен зависеть только от содержимого файла, и не зависеть от его полного/краткого имени, дат и атрибутов;<br />3. поучать его надо из скрипта (предпочтительнее JScript), но средствами винды без дополнительных бинарных файлов. Без регистрации dll. Расчет средствами JS тоже не вариант: уж очень долго в скрипте выполняется побайтовая обработка файлов, а хотелось бы побыстрее.<br />Может, что-то подобное уже где-то было? Просто я не смог найти?<br />Сейчас есть решение, проверяющее размер и дату изменения. Работало около года, но на прошлой неделе этого оказалось недостаточно... Это я на случай, если кто хочет предложить проверку по размеру и дате. Такая проверка останется, а вот если и то, и другое совпадает - проверить ещё и на содержимое.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sun, 10 Feb 2013 20:29:09 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=69342#p69342</guid>
		</item>
	</channel>
</rss>
