1

Тема: HTA: вычисление CRC32 строки или файла

<html>
<head>
<meta http-equiv=content-type content="text-html; charset=windows-1251">
<meta http-equiv=MSThemeCompatible content=yes>
<hta:application
    id=HTAApp
    applicationName=CRC32_Calculator
    icon=keymgr.dll
    maximizeButton=no
    innerBorder=no
    scroll=no
    selection=no
    contextMenu=no
    singleinstance=yes
    version=1.0
    author=mozers™
    email=mozers@mail.ru
    icq=256106175
>
<style type="text/css">
    body, table {background-color:threedface; overflow:hidden; margin:2px;}
    body, input, table, legend {font-family:MS Sans Serif; font-size:6pt;}
    legend, label {color:highlight;}
    legend {font-weight:bold;}
</style>
<script language="VBScript">
    Function vbASCII(s)
        vbASCII = Asc(s)
    End Function
    Function vbHex(i)
        vbHex = Hex(i)
    End Function
</script>
<script language="JavaScript" type="text/javascript">
    window.resizeTo(400, 128);
    document.title = HTAApp.applicationName.replace(/_/g,' ') + ' v.' + HTAApp.version;

    var crcTable = [];
    function crcTableCalc() {
        for(var i=0; i<256; i++){
            var c = i;
            for(var j=0; j<8; j++) c=(c&1) ? 0xEDB88320^(c>>>1) : c>>>1;
            crcTable[i] = c;
        }
    }

    function crc32 (str) {
        var c = 0xFFFFFFFF;
        for(var i=0; i<str.length; i++) c=crcTable[(c^vbASCII(str.charAt(i)))&0xFF]^(c>>>8);
        return c^0xFFFFFFFF;
    }

    function ReadBinaryFile(filename) {
        var Stream = new ActiveXObject("ADODB.Stream");
        with (Stream) {
            type=2;
            charset='ISO-8859-1';
            open();
            loadFromFile(filename);
            var content=readText();
            close();
        }
        return content;
    }

    function GetCRCfile(){
        var fname = iFile.value;
        var bin_str=ReadBinaryFile(fname);
        var result = crc32(bin_str);
        iDec.value = result;
        iHex.value = vbHex(result);
    }

    function GetCRCtext(){
        var str=iText.value;
        var result = crc32(str);
        iDec.value = result;
        iHex.value = vbHex(result);
    }

    crcTableCalc();
</script>
</head>
<body>
<table style="width:100%;" cellpadding="0" cellspacing="2">
    <tr><td>Text:
        <td style="width:100%;"><input id="iText" style="width:100%;" type="text">
        <td><input type=button onClick="GetCRCtext()" value="Calculate" hidefocus>
    <tr><td>File:
        <td style="width:100%;"><input id="iFile" style="width:100%;" type="file">
        <td><input type=button onClick="GetCRCfile()" value="Calculate" hidefocus>
    <tr>
        <td colspan="3">
        <fieldset><legend>&nbsp;CRC32&nbsp;</legend>
            DEC:&nbsp;<input id="iDec" style="width:150px;" type="text">
            &nbsp;&nbsp;&nbsp;
            HEX:&nbsp;<input id="iHex" style="width:150px;" type="text">
        </fieldset>
</table>
</body>
</html>

Автор идеи — mozers.

Основано на: Koders Code Search: crc32.js - JavaScript

2 (изменено: mozers, 2016-01-06 12:51:09)

Re: HTA: вычисление CRC32 строки или файла

Последняя версия находится тут

3 (изменено: Poltergeyst, 2014-08-03 16:26:51)

Re: HTA: вычисление CRC32 строки или файла

Без гарантий. Используете на свой страх и риск.

Для подсчета CRC32 контрольной суммы строки или файла(в стиле WinRAR) можно использовать простенькую библиотеку mycrc32.dll(MinGw 4.4.1) экспортирующую две WinApi функции:

1) Для подсчета CRC32 контрольной суммы файла: ULONG file_crc32(строка ANSI [полный путь к файлу])
2) Для подсчета CRC32 контрольной суммы cтроки: ULONG str_crc32(строка ANSI [целевая строка])

Пример использования mysrc32.dll совместно с DynamicWrapperX для получения CRC32 строки и файла(JScript):


//---------------------------------------------
// Использование mysrc32.dll для подсчета CRC32 строки 
// и файла (перетащите значок файла на значок скрипта).
// Расположите mysrc32.dll рядом со скриптом.
// Lang: JScript
// Потребуется dynwrapX.dll (http://www.script-coding.com/dynwrapx.html)
// OC WinXP
//---------------------------------------------

var path = WScript.ScriptFullName.match(/.+\\/ig)[0]+'\\mycrc32.dll';
//var path = 'mycrc32.dll';

var oDX = new ActiveXObject('DynamicWrapperX');
try
{
    oDX.Register(path,'str_crc32','f=s','i=s','r=u');
    oDX.Register(path,'file_crc32','f=s','i=s','r=u');
}
catch(e){
    WScript.Echo('Ошибка регистрации API');
    oDX = null;
    WScript.Quit();
}

var s;
var crc32;
var args = WScript.Arguments;

// CRC32 для строки ANSI
//---------------------------------------------
    s = 'abracadabra';
    crc32 = oDX.str_crc32(s);
    WScript.Echo('String: "' + s + '"\n\r' + 'CRC32 = 0x' + crc32.toString(16).toUpperCase());


// CRC32 для файла(перетащите значок файла на значок скрипта)
//---------------------------------------------
if (args.length)
{
    s = args.Item(0);
    crc32 = oDX.file_crc32(s);
    WScript.Echo('File: "' + s + '"\n\r' + 'CRC32 = 0x' + crc32.toString(16).toUpperCase());
}
else
{
    WScript.Echo('No file input.') 
}


oDX = null;
WScript.Quit();

Пример использования mysrc32.dll совместно с scrsvc.dll для получения CRC32 строки и файла(JScript):


//---------------------------------------------
// Использование mysrc32.dll для получения CRC32 строки 
// и файла (перетащите значок файла на значок скрипта).
// Расположите mysrc32.dll рядом со скриптом.
// Потребуется зарегистрированная библиотека scrsvc.dll (http://forum.script-coding.com/viewtopic.php?id=8082)
// Lang: JScript
// OC WinXP
//---------------------------------------------

var path = WScript.ScriptFullName.match(/.+\\/ig)[0]+'\\mycrc32.dll';
//var path = 'mycrc32.dll';

var oScrSvc = new ActiveXObject('ScriptService.Service');

var s;
var crc32;
var args = WScript.Arguments;

// CRC32 для строки ANSI
//---------------------------------------------
s = 'abracadabra';
with (oScrSvc)
{
    set_strarg(0, s, false);
    crc32 = api_call(path,'str_crc32',1);
}
WScript.Echo('ScrSvc - String: "' + s + '"\n\r' + 'CRC32 = 0x' + crc32.toString(16).toUpperCase());


// CRC32 для файла(перетащите значок файла на значок скрипта)
//---------------------------------------------
if (args.length)
{
    s = args.Item(0);
    with (oScrSvc)
    {
        set_strarg(0, s, false);
        crc32 = api_call(path,'file_crc32',1);
    }
    WScript.Echo('ScrSvc - File: "' + s + '"\n\r' + 'CRC32 = 0x' + crc32.toString(16).toUpperCase());
}
else
{
    WScript.Echo('No file input.') 
}


oScrSvc = null;
WScript.Quit();
Post's attachments

mycrc32.zip 7.23 kb, 4 downloads since 2014-08-03 

You don't have the permssions to download the attachments of this post.