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
4

1 回答 1

4

这个更简单:关键就是计算机名,算法是众所周知的。因此,可以找到您的计算机名称的每个人(这包括同一交换机上的每个人,即使他的 PC 被入侵,并且取决于您的邮件系统,您曾经发送过邮件的每个人)都可以无限制地解密。

如果您的 PC 崩溃了,并且您为新安装的设备指定了不同的名称,那么您也将不走运。

编辑

正如讨论:拥有硬编码密钥,拥有反编译器和同时拥有密钥是不可能的。

您的方法(使用因计算机而异的东西)非常好,但是您应该依赖一些不能像计算机名称(或 MAC 地址...)那样容易被读取的东西。想到处理器序列号或 Windows 产品 ID - 两者都不容易远程读取,但请记住,如果有人可以访问这台机器,游戏就结束了!

于 2012-05-24T03:59:11.227 回答