作者hn12404988 (Willy)
看板C_and_CPP
标题[问题] 如何知道刚写入的jpg档有无毁损
时间Wed Jun 8 17:01:56 2016
开发平台(Platform): GCC, Linux
额外使用到的函数库(Library Used): 无
问题(Question):伺服器端接到装置端传回一组base64字串
decode完,用ofstream::open开了一个新的准备写入档案,再用ofstream::write写入
成一个jpg档,但为了防止有心人上传一段假的base64字串,所以写出来的jpg档事实
上不是图片档,读取会corrupt,请问我要如何再原本的main thread里再以c++程式
检测刚写入的档案,是否能读取成功?
喂入的资料(Input):base64字串
预期的正确结果(Expected Output): 能判断图片档写入成功
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.133.16.181
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1465376519.A.1A6.html
※ 编辑: hn12404988 (220.133.16.181), 06/08/2016 17:03:47
※ 编辑: hn12404988 (220.133.16.181), 06/08/2016 17:04:56
1F:→ MOONRAKER: 装imagemagick,用identify看他是图档还是什麽挖哥 06/08 18:00
2F:→ MOONRAKER: (当然你要用system()执行) 06/08 18:00
3F:推 TobyH4cker: 然後就被黑了XD 06/08 20:35
4F:推 winken2004: 检查jpg header? 06/08 20:39
5F:推 LiloHuang: 宽松的检查,可看档头 SOI (FF D8) 档尾 EOI (FF D9) 06/08 20:42
7F:→ LiloHuang: 如果要严谨一点还是得把整个 JPEG structure 走一次 06/08 20:43
8F:→ LiloHuang: system() 如果是公开伺服器得留意 command injection 06/08 20:44
9F:→ LiloHuang: 个人认为就是交给 jpeg decoder 来判断就好 06/08 20:44
10F:→ LiloHuang: 用好一点的 JPEG library 读资讯 (e.g. libjpeg-turbo) 06/08 20:44
11F:推 Killercat: 基本上JPG格式很松散 只要头两个位元是[255, 216] 06/13 07:36
12F:→ Killercat: 出来通常就不会corrupt, 顶多图看起来是杂讯 06/13 07:37