專題構思
我打算做出專研app的初始版本,也就是實作出用隱寫術進行3D模型嵌入的app,功能包含了:顯示3D模型(obj檔)、對3D模型進行訊息的嵌入與萃取。嵌入指的是將要隱藏的訊息藏進掩護媒體中的動作,此處的掩護媒體即為obj檔,而萃取是將訊息從嵌入完的媒體中取出的動作。
其中嵌入與萃取的部分使用以前寫的C++程式,透過Objective-C與Swift進行連結。
專題原型設計
原本預想為可以從多個預設模型中選擇想要嵌入的模型並傳送出去,接收的人可以從收到的多個模型中選擇並進行萃取,由於原型不是使用Xcode製作所以介面看起來會差蠻多的,不過整個流程大致為以下情形:
首先有多個模型可以選擇,預計還要有新增自己下載的模型功能。
選擇好模型後輸入密碼即可得到訊息(密碼由使用者私下由安全管道傳遞,如見面傳遞等等)
就可以得到剛剛嵌入進模型的訊息了。
首先有多個模型可以選擇,預計還要有新增自己下載的模型功能。
選擇好模型後在此輸入要隱藏的訊息與密碼並按下開始嵌入。
接著把嵌入完成的模型傳送給其他人,其他人打開此app選擇萃取可以看到剛剛收到的模型。
選擇好模型後輸入密碼即可得到訊息(密碼由使用者私下由安全管道傳遞,如見面傳遞等等)
就可以得到剛剛嵌入進模型的訊息了。
最終成果
對3D模型(obj檔)的訊息嵌入、萃取已經完成,但是由於這個加密的演算法需要兩個參數,我還不確定如何將使用者所輸入的密碼轉換為這兩個參數,目前暫定將一個參數固定,另一個參數由使用者自訂的密碼(全數字)取餘數得出。
由於時間不足等因素,此專案與當初設想的完成度有落差,實際差別在:
1.無法顯示obj檔
2.無法從多個模型中自己選擇要嵌入哪個模型
3.無法將嵌入完成之模型傳送出去
4.無法接收別人的模型進行萃取
5.UI十分簡陋,完全沒有美化只有功能
5.UI十分簡陋,完全沒有美化只有功能
綜上所述,本專案可以解釋為製作出單機版本。
而在開發過程中學習到的技巧則有這些:
1.將C++源碼藉由Objective-C的.mm檔編譯與執行,並在swift中可以進行呼叫。
2.在iOS的app中進行檔案的輸出入,了解到app的路徑呼叫與檔案該存放的位置.
3.使用Tab Bar Controller進行場景的轉換
接下來就是整個app的流程介紹了。
首先為加密功能,介面如下:
在方框中輸入要隱藏的訊息後,輸入自己定義的密碼,並按下開始加密。
加密完成後,就會出現訊息通知。
此時會將Stego.obj檔輸出到app底下的/Documents中,如果之前已經有嵌入過則會覆蓋掉檔案。
而切換到解密畫面後,畫面如下:
輸入剛才的Key就能由Stego.obj得到剛才隱藏的訊息。
如果密碼錯誤則會顯示無法萃取。
功能就這些。
加密完成後,就會出現訊息通知。
此時會將Stego.obj檔輸出到app底下的/Documents中,如果之前已經有嵌入過則會覆蓋掉檔案。
而切換到解密畫面後,畫面如下:
輸入剛才的Key就能由Stego.obj得到剛才隱藏的訊息。
如果密碼錯誤則會顯示無法萃取。
功能就這些。
心得
當初設想要做這個以為很簡單,只要學會將C++放到swift中執行就好,實際去做發現當初C++的源碼很難直接套用,因為嵌入與萃取兩個cpp檔有許多重複的變數、函數等,導致我幾乎把整個程式重新修改了一遍,其中還要加一些Objective-C的函數來使swift可以使用,甚至還在原本的程式中發現了BUG,可以說是歷經苦難,到最後來不及只做出了單機版本。
接下來要研究出如何讓app底下的檔案傳送出去,我預想是使用"分享到..."這個功能,來選擇各種通訊軟體作為傳送管道,如Line、messenger、Skype......等等,而傳送完就不保留嵌入後的模型。接收模型的人可以打開app並選擇"瀏覽"來查看手機內的模型並萃取出訊息,我不確定iOS能否做到,所以這部分是之後主要研究的目標。
接下來還希望可以加入圖片嵌入的功能,比起模型來說,iOS上傳送、接收、選擇圖片都較為簡單,但是由於jpg圖片的訊息嵌入、萃取演算法我還不會,所以暫時做不出來。
接下來要研究出如何讓app底下的檔案傳送出去,我預想是使用"分享到..."這個功能,來選擇各種通訊軟體作為傳送管道,如Line、messenger、Skype......等等,而傳送完就不保留嵌入後的模型。接收模型的人可以打開app並選擇"瀏覽"來查看手機內的模型並萃取出訊息,我不確定iOS能否做到,所以這部分是之後主要研究的目標。
接下來還希望可以加入圖片嵌入的功能,比起模型來說,iOS上傳送、接收、選擇圖片都較為簡單,但是由於jpg圖片的訊息嵌入、萃取演算法我還不會,所以暫時做不出來。
最後我認為在這學期做過這個專題之後我對Xcode的介面與操作熟悉許多,在之後的專題研究中一定能發揮很大的功用。
沒有留言:
張貼留言