unioffice校驗
go中除了unioffice就沒有很好的庫去處理office文檔了,基本上unioffice是唯一選擇
不過unioffice使用需要許可,但他又開源,所以分析一下校驗邏輯
源碼經過混淆,但是還是可以直接看到邏輯

跳過來看到這個邏輯,很明顯_ggg用來處理許可

這邊能看到會調用一些常量_fa,_gd,_ecg等

常量字符串都經過unicode編碼



根據內容,大致可以知道許可信息的結構,因此_efa就是為了獲取中間的許可信息,下一個_bef則是對許可信息進行處理
-----BEGIN UNIDOC LICENSE KEY-----
許可信息
-----END UNIDOC LICENSE KEY-----
_bef函數上來就先對許可信息進行判斷,大致就是判斷里面是不是包含了特定的結構,如果要構造一個許可,那么只需要滿足這3個中的任意一個就行了,第一個實際上是\n+\n

因此可以得到許可結構
-----BEGIN UNIDOC LICENSE KEY-----
part1
+
part2
-----END UNIDOC LICENSE KEY-----
這里很明顯就是分別對兩部分進行解碼,_bfed是定義的base64的別名,因此可以知道part1和part2是base64編碼的


后面加載了公鑰,所以這個函數的第一個參數是公鑰,那么即是說,只需要生成一對密鑰,然后將公鑰替換,就可以使用自己的私鑰生成許可了


后面就比較簡單,對許可信息進行簽名校驗,從而知道了part1是明文信息,part2是簽名信息

最后就只需要確定正確的許可信息即可,下面是對應的結構體

自此我們可以根據結構體映射的json創建一個屬于我們自己的許可信息并使用自己的私鑰簽名
最終在驗證許可時要求LicenseId和CustomerId的長度不小于10,創建時間是時間戳,過期時間為0則是永久授權,另外客戶名稱和一開始傳入的參數要相同

最終授權信息長這樣
-----BEGIN UNIDOC LICENSE KEY-----
base64({"LicenseId":"1234567890",
"Customer":"1234567890",
......})
+
base64(rsa_sign({"LicenseId":"1234567890",
"Customer":"1234567890",
......}))
-----END UNIDOC LICENSE KEY-----
此外,unioffice提供官方的試用許可,但是需要注冊賬號,不過畢竟是國外的平臺,能不注冊就不注冊。。

浙公網安備 33010602011771號