2012-05-24 48 views
1
Option Explicit 

Dim sSecretData 
sSecretData = "Here is some very secret data." 

' Build up the key 
Dim wshNetwork, sComputerName 
Set wshNetwork = WScript.CreateObject("WScript.Network") 
sComputerName = wshNetwork.ComputerName 

Dim capEData 
Set capEData = CreateObject("CAPICOM.EncryptedData") 

capEData.Algorithm = 3 'Use 3DES 
capEData.SetSecret sComputerName 
capEData.Content = sSecretData 

Dim sCipherText 
sCipherText = capEData.Encrypt 

capEData.Algorithm = 3 
capEData.SetSecret sComputerName 
capEData.Decrypt sCipherText 

Dim sPlainText 
sPlainText = capEData.Content 

MsgBox "Original data: " & sSecretData & chr(13) _ 
    & "Encrypted data: " & sCipherText & chr(13) _ 
    & "Recoverd data: " & sPlainText 
+0

這聽起來像你正試圖實施某種DRM系統。 DRM的第一個法則是它不起作用:如果用戶的計算機可以解碼數據,那麼用戶可以爲自己獲取數據。 –

回答

4

這個更簡單:關鍵只是計算機名,算法是衆所周知的。所以每個人都可以找到你的計算機名稱(這包括同一臺交換機上的每個人,即使他的PC已經被盜用,並且根據你的郵件系統發送郵件的每個人都可以無限制地解密)。

如果您的PC崩潰了,並且您給了您的新安裝一個不同的名稱,那麼您的運氣也不好。

編輯

正如從討論:有一個硬編碼關鍵,有反編譯且在同一時間祕密關鍵是不可能的。

你的方法(使用一些不同於計算機的東西)是相當好的,但是你應該依賴某些東西,不能像計算機名稱(或MAC地址...)那樣輕易地讀取它。想到處理器序列號或Windows產品ID - 兩者都不容易被遠程讀取,但請記住,如果有人能夠訪問此機器,則遊戲結束!

+0

如果我需要在代碼中使用此密鑰並將其保密,可以使用什麼「密鑰」? – CJ7

+0

更新了我的答案。 –