找回密码
 加入
搜索
查看: 1898|回复: 9

有没有crc校验快点的..

[复制链接]
发表于 2008-7-11 10:04:45 | 显示全部楼层 |阅读模式
在坛子上找了下,只有一个作品,和居士的.
作品里,不提供自定义校验的。
居士那个也太慢了.校验一个文件要1分半钟````

比较郁闷.

[ 本帖最后由 木纳 于 2008-7-16 07:36 编辑 ]
发表于 2008-7-11 10:39:31 | 显示全部楼层
有个叫fastcrc的,还行
发表于 2008-7-11 11:53:41 | 显示全部楼层
一般都是看文件大小,而定时间长短的,文件小了自然就快了,文件大了肯定要花一定的时间。
 楼主| 发表于 2008-7-11 22:45:51 | 显示全部楼层
我是想用crc来校验下系统文件夹下的一些文件,那里面的没什么特别大的文件.
md5已然靠不住了.
不知道crc能不能支持住


二楼的,能上传一下吗。谢谢
发表于 2008-7-12 01:15:02 | 显示全部楼层
为什么还要用CRC呢?用sha1岂不是更可靠。。。
发表于 2008-7-12 15:53:17 | 显示全部楼层
你是不是看了 可执行文件的 MD5 碰撞 ?那个我也会做
建议用Sigcheck检查数字签名,而不是算CRC
http://technet.microsoft.com/zh-cn/sysinternals/bb897441(en-us).aspx
发表于 2008-7-12 22:06:58 | 显示全部楼层
碰撞MD5你成功了?分享下。。。

我可以制作了两个文件大小不同,但是MD5一样。但是经过以上程序处理之后新的MD5码是跟原来两个程序其中任意一个MD5都是不一样的。不知楼上的是否明白。有点绕口令了。
发表于 2008-7-13 01:22:55 | 显示全部楼层
看着~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Crc32_File.au3

; Created by Yudin Dmitry (Lazycat)

Global $nBufSize = 16384 * 8
Global $CRC32 = 0
Global $sFile = FileOpenDialog("Open file", "", "Any file (*.*)")
If $sFile = "" Then Exit

Global $timer = TimerInit()
Global $hFile = FileOpen($sFile, 16)
For $i = 1 To Ceiling(FileGetSize($sFile) / $nBufSize)
    $CRC32 = FastCRC32(FileRead($hFile, $nBufSize), BitNot($CRC32))
Next
FileClose($hFile)

MsgBox (0, "Result", Hex($CRC32, 8) & " in " & Round(TimerDiff($timer)) & " ms")

Func FastCRC32($vBuffer, $nCRC32 = 0xFFFFFFFF)
    Local $nLen, $vTemp
    If DllStructGetSize($vBuffer) = 0 Then ; String passed
        If IsBinary($vBuffer) Then
            $nLen = BinaryLen($vBuffer)
        Else
            $nLen = StringLen($vBuffer)
        EndIf
        $vTemp = DllStructCreate("byte[" & $nLen & "]")
        DllStructSetData($vTemp, 1, $vBuffer)
        $vBuffer = $vTemp
    EndIf

    ; Machine code hex strings (created by Laszlo)
    Local $CRC32Init = "0x33C06A088BC85AF6C101740AD1E981F12083B8EDEB02D1E94A75EC8B542404890C82403D0001000072D8C3"
    Local $CRC32Exec = "0x558BEC33C039450C7627568B4D080FB60C08334D108B55108B751481E1FF000000C1EA0833148E403B450C89551072DB5E8B4510F7D05DC3"

    ; Create machine code stubs
    Local $CRC32InitCode = DllStructCreate("byte[" & BinaryLen($CRC32Init) & "]")
    DllStructSetData($CRC32InitCode, 1, $CRC32Init)
    Local $CRC32ExecCode = DllStructCreate("byte[" & BinaryLen($CRC32Exec) & "]")
    DllStructSetData($CRC32ExecCode, 1, $CRC32Exec)

    ; Structure for CRC32 Lookup table
    Local $CRC32LookupTable = DllStructCreate("int["& 256 &"]")

    ; CallWindowProc under WinXP can have 0 or 4 parameters only, so pad remain params with zeros
    ; Execute stub for fill lookup table
    DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CRC32InitCode), _
                                                   "ptr", DllStructGetPtr($CRC32LookupTable), _
                                                   "int", 0, _
                                                   "int", 0, _
                                                   "int", 0) 
    ; Execute main stub
    Local $ret = DllCall("user32.dll", "uint", "CallWindowProc", "ptr", DllStructGetPtr($CRC32ExecCode), _
                                                                 "ptr", DllStructGetPtr($vBuffer), _
                                                                 "uint", DllStructGetSize($vBuffer), _
                                                                 "uint", $nCRC32, _
                                                                 "ptr", DllStructGetPtr($CRC32LookupTable))
    Return $ret[0]
EndFunc


还有一个是生成crc文件+校验的

[ 本帖最后由 ken0137 于 2008-7-13 01:26 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +2 收起 理由
木纳 + 2 感谢分享~!

查看全部评分

 楼主| 发表于 2008-7-16 07:35:30 | 显示全部楼层
我想试试用几种不同的校验方式一起用.看需要多少时间.
md5的才整到.

多谢谢各位解答!
3q
发表于 2010-12-17 10:26:13 | 显示全部楼层
好东西 收藏了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-2 20:23 , Processed in 0.155284 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表