2014-03-06 137 views
0

由於Java在1月更新了其安全設置,我無法承受可信證書在線登錄我的jar文件,每年大約200美元,所以我只將Processing2 jar文件轉換爲Processing1。 5 JavaScript文件。現在的問題是,爲了讓訪問者看到js輸出,我不得不讓他們至少'讀'我的pde文件,而我不想公開我的源代碼。處理JS代碼權限

那麼,如何在不發佈我的源代碼的情況下展示我的作品?非常感謝!

在/ var/www/html等/視頻我處理的文件夾:

-rw-r--r--. 1 root root 2709 Sep 10 21:03 main.pde 
-rw-r--r--. 1 root root 238 Mar 6 15:12 proj01.html 
-rw-r--r--. 1 root root 231867 Mar 4 23:55 processing-1.4.1.min.js 

HTML文件看起來像(讓遊客知道我的PDE文件名):

<!DOCTYPE html> 
<html> 
<head> 
    <script src="processing-1.4.1.min.js"></script> 

</head> 
<body> 
    <canvas data-processing-sources="main.pde"></canvas> 
</body> 
</html> 

和自我簽名的jar文件被Java Update51阻止,除非訪問者手動將安全級別設置爲最低。只有從Symantec或Godaddy等服務購買的證書才能讓jar文件在瀏覽器中順利運行。 enter image description here

回答

1

是的,有隱藏代碼(和任何其他資產)的簡單方法。它們不是防彈的,它儘可能地接近編譯代碼而不會過分偏執。你在這裏看到的是一個自動執行的匿名函數,除了灰塵和灰燼外(當然還有一個正在運行的processing.js草圖)。這個函數裏面有你的處理代碼,base64編碼(見標記點,更多信息見下)

它也會導入庫,設置畫布,並運行它。沒有pde,沒有腳本元素,除了處理設置以外沒有canvas-id。沒有參考代碼,除了某處全球處理庫對象中,5分鐘後找不到它,所以我認爲它不夠安全)

(function(){ 
    var lib,code; 
    code=atob("/*YOUR BASE64 ENCODED CODE GOES HERE*/"); 
    lib = document.createElement("script"); 
    lib.src="processing-1.4.1.min.js"; 
    document.head.appendChild(lib); 
    lib.onload=function(){ 
     var canvas,pjs; 
     canvas = document.createElement("canvas"); 
     document.body.appendChild(canvas); 
     pjs = new Processing(canvas,code); 
     this.onload=null; 
} 
})() 

約base64編碼附加信息: 這種方法轉換成任何一個Datastring。 您可以使用btoa()進行編碼,或使用atob()進行解碼。有些網站會爲你編碼,如果你的大文件不像JavaScript那樣已經存在,那就更舒服了。

它可以應用於各種資產,從而可以創建具有聲音和紋理的整個遊戲,而無需外部資源。但這只是表示數據的另一種方式,並不是真正的「編譯」,因爲編碼不會永久地改變代碼,您不需要做任何事情,只需在字符串上運行atob(),並立即恢復原始形式。

有關如何運行腳本附加信息: 您可以隱藏腳本DOM樹某處標記(可能是最簡單的解決方案)裝載在外部JavaScript(甚至晦澀的文件名實驗,省略。 js擴展或使用另一個)在這裏你也可以應用縮小。你的base64字符串很可能是你的代碼的95%,其餘的將被縮小並且與編碼數據幾乎沒有區別。

有很多方法可以在各個方向上改進這種方法,但我想堅持那些我認爲最實用的方法。如果你想要更多,請問。

0

您可以編輯html文件,不要包含指向您可以刪除的pde文件的鏈接。 儘管如此,你可以查看頁面的html源代碼。

雖然您可以創建一個自簽名證書來簽署您的.jar文件。 Here是我幾年前上傳的自簽名applet的一個例子。 我已使用there instructions對它進行了簽名。

讓您的訪問者查看源代碼可能證明對他們有用。

+0

非常感謝您的建議!我很欣賞共享的精神,但在這種情況下,我沒有編寫處理代碼。因此,我必須考慮作者的版權,儘管我想介紹這項工作的輸出(我擁有這個項目的數據和想法,但我沒有擁有源代碼)。其次,由於Java Update 51安全默認設置,自簽名jar仍會被阻止。我會更新我的問題來說明。 – leoce

+0

我明白了,所以對於自簽名選項,您需要通知用戶在Java Update 51之前使用JRE,或者更改安全設置:(儘管如果您的軟件必須在瀏覽器中100%工作,那麼這不是一個完美的解決方案:如何允許一個可下載的版本(已編譯的桌面應用程序)並顯示該軟件的屏幕截圖預覽? –