作者GALINE (我是CQD,不是cqd)
看板GameDesign
标题Re: [程式] 更新程式
时间Fri Jun 13 13:31:56 2008
※ 引述《gamblemaker (GambleMaker)》之铭言:
: ※ 引述《gamblemaker (GambleMaker)》之铭言:
: : 推 GALINE:CRC、MD5、SHA都是一样功能的东西,爱用CRC是因为CRC速度快
: : → GALINE:不考虑强固性,只考量档案版本跟是否有传输错误,CRC就能用
: 我是想回这位大大的推文 感谢你的推 我也回报你一下
: 你不知道 TCP 里面有 CRC 吗??
: checksum 那栏干麽用的....
楼上的回文说的是客户端程式(也就是你写的updater)计算档案的CRC,然後传回伺服器
这件事情跟TCP的CRC并没有关系。并不会因为TCP有对每个封包作CRC就能够知道整个档
案的CRC
: 还有 crc 怎样确保档案是唯一的?? 还有所谓强固性是什麽东西???
基本上crc、md5、sha、des…这些东西都是杂凑函数(hash function。
杂凑函数的目的是你丢一段资料进去,他会吐出一段长度固定的杂凑值出来。吐出来的东
西(理论上)不能用来反推出原本的资料内容。而且只要喂进去的资料有很小的差别,杂
凑值就会变得完全不同。
换言之,只要档案有改动/损坏/版本不同,计算出的hash就会完全不同。因此可以用来当
作档案版本识别,还能避免使用者自己改版本纪录档的问题。
TCP对整个封包作CRC,然後把CRC的值放在封包内,接收端检查crc跟封包是否批配,如果
批配表示封包内容没有传输错误。要用MD5或sha-1来作理论上也是一模一样。可是技术上
来说会浪费运算资源跟网路频宽。
同样的,你的档案作CRC之後,只要没有被改动,算出的CRC跟伺服器端的CRC应该要一样
如果不一样,要不是程式被改过,不然就是版本不同了(或说伺服器端的程式被改过)
强固性就是指容不容易被人找出碰撞。crc最容易,因为他bit数最少。实务上把crc跟
档案大小两个参数参在一起,要碰撞的机会就很低了。
这种情况如果真的碰撞,大概跟搭747结果外舱裂开,还只有自己被吸出机舱外一样倒楣
当然,如果你不信任CRC,你也可以用MD5、SHA、或其他任何hash function
如果你要知道更详细的概念,请搜寻hash function或杂凑函数。这个可以讲很久…
: → GALINE:P2p跟ftp跨nat一样可以用,列表公开只要你不让人上传就没事 06/13 12:41
: p2p跟ftp跨nat当然可以用 但是你有办法解决吗?
: 也许你很强花一天就解决这个问题了
对不起,我不强,现在我连百行的C程式都写不出来。
不过我觉得我知道的东西应该够你参考。
FTP要跨NAT请切passive模式
怎麽实做要看你是要自己写client、用别人的library、或是呼叫系统内建的ftp程式
自己写的话…请先去看rfc959,这是FTP的规范文件。如果真看完你就比我威了[汗]
用别人的library,要怎麽下指令切换请找library的的文件。
呼叫系统内建的ftp,请参考系统程式的说明档。像是进ftp之後下"PASV"指令之类的
windows的ftp不直接支援,要下literal指令给ftp server。详细请google。
P2P我还真的不知道怎麽搞,但至少技术上可行。现在的主流P2P都能作到
如果有现成的library就好了。
: 那我们假设 server 後面也是 nat ? 请问哪个比较方便??
server端如果也在nat後面会很麻烦。我知道的方法是设定nat的dmz给你的档案伺服器。
不过我不认为这样是个好方法就是。
最好是不要这麽作,真的要的话就多试验了[汗]
: 列表公开真的不上传就没事吗?我中间给你 proxy 你怎麽办?
: 在加上你只有 CRC , 档案要被换爽的喔?
前提是人家要能找出同样大小的CRC碰撞,而且换了以後还要是能执行的档案…
当然,如果你不信任CRC,那就用MD5或SHA,甚至你想用一些鲜为人知的hash也可以
这种问题就跟锁跟开锁一样,扁钥匙并不是无法被打开,但是为什麽大家还是用扁钥匙?
因为扁钥匙已经够用。要加强安全性的话成本跟方便性都会大幅下降。
如果你认为需要更高的安全性,避免中间人,那就去弄台能跑https或ftps的机器吧,然
後去申请公开签章吧。然後找看看有没有适合的library来用。
或你比较拚命的话,你可以看很多很多的rfc文件以後自己写…
--
你们这些只会躲在家里发些缺乏社会知识讨论串的家伙
--护士魔女蔻睦姬
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.112.152
※ 编辑: GALINE 来自: 61.62.112.152 (06/13 13:32)
※ 编辑: GALINE 来自: 61.62.112.152 (06/13 13:34)
1F:推 gamblemaker:我承认这篇比较有被M的价值 06/13 13:34
2F:→ gamblemaker:但是 用http就可以的事情 为什麽要搞FTP? 06/13 13:35
3F:→ GALINE:那就用http啊,只要你有办法传输就好了 06/13 13:36
4F:→ GALINE:至於http会不会overhead比较重我就不敢说了 06/13 13:37
5F:→ GALINE:我是觉得原本人家回文只是举个实做可能的方法,而且也不会 06/13 13:38
6F:→ GALINE:比较差…你可以不用直接飙回去,你语气真的很呛 06/13 13:38
7F:→ GALINE:另外http伺服器一般来说比较肥,相对的可能被攻击的点也多 06/13 13:40
8F:→ GALINE:有没有必要另外开,或者是有现成的http机器可用,这些都是 06/13 13:41
9F:→ GALINE:要考量的点。基本上这个部份都是网路安全,跟写程式本身的 06/13 13:42
10F:→ GALINE:关系相对比较小了… 06/13 13:42
11F:推 haryewkun:用ftp的理由是因为有现成的ftp server,直接架就好了。 06/13 13:45
12F:→ GALINE:搞不好人家是用win2k/2k3搭配IIS当档案伺服器,都现成啊www 06/13 13:45
13F:→ haryewkun:其实想了想,用http也一样…… 06/13 13:46
14F:→ haryewkun:XD 06/13 13:46
15F:→ gamblemaker:说实话RFC959 几年前就看过 很多东西是没被实作的 06/13 14:18