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