[問題] 如何知道剛寫入的jpg檔有無毀損

作者: hn12404988 (Willy)   2016-06-08 17:01:56
開發平台(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):
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-06-08 18:00:00
裝imagemagick,用identify看他是圖檔還是什麼挖哥(當然你要用system()執行)
作者: TobyH4cker (Toby (我要當好人))   2016-06-08 20:35:00
然後就被黑了XD
作者: winken2004 (新竹肥宅)   2016-06-08 20:39:00
檢查jpg header?
作者: LiloHuang (十年一刻)   2016-06-08 20:42:00
寬鬆的檢查,可看檔頭 SOI (FF D8) 檔尾 EOI (FF D9)https://goo.gl/70pW4L如果要嚴謹一點還是得把整個 JPEG structure 走一次system() 如果是公開伺服器得留意 command injection個人認為就是交給 jpeg decoder 來判斷就好用好一點的 JPEG library 讀資訊 (e.g. libjpeg-turbo)
作者: Killercat (殺人貓™)   2016-06-13 07:36:00
基本上JPG格式很鬆散 只要頭兩個位元是[255, 216]出來通常就不會corrupt, 頂多圖看起來是雜訊

Links booklink

Contact Us: admin [ a t ] ucptt.com