Excel 我可以在VBA中使用DPAPI(或类似的东西)吗?
关于VBA的初学者系列问题中的另一个 我正在VBA中编写Excel外接程序,该外接程序使用本地配置文件。Excel 我可以在VBA中使用DPAPI(或类似的东西)吗?,excel,dpapi,vba,Excel,Dpapi,Vba,关于VBA的初学者系列问题中的另一个 我正在VBA中编写Excel外接程序,该外接程序使用本地配置文件。 此文件需要包含远程服务的密码。 显然,将此密码存储为纯文本并不理想。但我正在寻找一种可以对文本进行编码/解码的算法,这样它至少在配置文件中看起来不像纯文本 我遇到了一个对WindowsDPAPI的引用,但我不确定这是否是Excel VBA的合适解决方案。我也不确定如何从VBA中使用这个API,因为我只找到了将它与.NET一起使用的参考资料。Visual Studio对此项目不可用 所以问题分
此文件需要包含远程服务的密码。
显然,将此密码存储为纯文本并不理想。但我正在寻找一种可以对文本进行编码/解码的算法,这样它至少在配置文件中看起来不像纯文本 我遇到了一个对WindowsDPAPI的引用,但我不确定这是否是Excel VBA的合适解决方案。我也不确定如何从VBA中使用这个API,因为我只找到了将它与.NET一起使用的参考资料。Visual Studio对此项目不可用 所以问题分为两部分:
1) 如果可以从VBA中使用DPAPI,我可以举一个使用示例吗?
2) 如果无法在VBA中使用DPAPI,您对如何以可逆的编码方式存储文本有何建议 解决方案必须在Excel 2003及更高版本中运行(如果有必要) 再次感谢你 解决方案必须在Excel 2003及更高版本中运行(如果有必要) 对于Excel VBA,我建议使用CAPICOM库 从下载文件。安装后,按照以下说明注册Dll 32位操作系统 将文件Capicom.dll从
C:\Program Files\Microsoft Capicom 2.1.0.2 SDK\Lib
复制到C:\Windows\System32
下一步在开始菜单|运行中,键入以下内容
Regsvr32 C:\Windows\System32\Capicom.dll
Regsvr32 C:\Windows\SysWOW64\Capicom.dll
64位操作系统
将文件Capicom.dll从C:\Program Files(x86)\Microsoft Capicom 2.1.0.2 SDK\Lib\x86
复制到C:\Windows\SysWOW64
下一步在开始菜单|运行中,键入以下内容
Regsvr32 C:\Windows\System32\Capicom.dll
Regsvr32 C:\Windows\SysWOW64\Capicom.dll
现在我们准备在VBA项目中使用它
将此代码粘贴到模块中
Option Explicit
Sub Sample()
Dim TextToEncrypt As String, EncryptedText As String
Dim TextToDeCrypt As String, DeCryptedText As String
Dim KeyToEncrypt As String
TextToEncrypt = "Hello World"
KeyToEncrypt = "JoshMagicWord"
EncryptedText = EncryptString(TextToEncrypt, KeyToEncrypt)
DeCryptedText = DecryptString(EncryptedText, KeyToEncrypt)
Debug.Print "The string " & TextToEncrypt & " after encryption looks like this"
Debug.Print "-----------------------------------------------------------------"
Debug.Print EncryptedText
Debug.Print "-----------------------------------------------------------------"
Debug.Print "The above string after decrypting looks like this"
Debug.Print "-----------------------------------------------------------------"
Debug.Print DeCryptedText
End Sub
Public Function EncryptString(strText As String, ky As String) As String
Dim Cap As Object
Dim cryptIt
Set Cap = CreateObject("CAPICOM.EncryptedData")
Cap.Algorithm = 3
Cap.SetSecret ky
Cap.Content = strText
EncryptString = Cap.Encrypt
End Function
Public Function DecryptString(strText As String, ky As String) As String
Dim Cap As Object
Dim cryptIt
Set Cap = CreateObject("CAPICOM.EncryptedData")
Cap.Algorithm = 3
Cap.SetSecret ky
Cap.Decrypt strText
DecryptString = Cap.Content
End Function
函数EncryptString
加密字符串,函数DecryptString
解密字符串。运行上述子示例时,请参见结果快照
您的解决方案需要有多“安全”?也就是说,您需要在多大程度上尝试找出密码才能抵抗?请记住,无论您如何执行此操作,它都将与VBA项目上的密码保护一样安全,因为一旦绕过此保护,您的解码服务密码将很容易访问…最终,对于此项目,它不需要比VBA项目更安全“普通的joe在记事本中打开配置文件时看不到密码”。如果“攻击者”“复制用户的配置文件,那么它的安全性也无关紧要。能够使用DPAPI会很好,但如果有更简单的可能性,我可以使用更简单的东西。。。但我希望它比rot13或简单的替换密码稍微复杂一点:)你能用二进制文件代替吗?这里和网上都有许多使用VBA读取和写入二进制文件的例子。我不想使用二进制文件格式,因为我希望用户能够手动编辑其他“非安全”配置选项(这几乎是所有内容,除了这个密码)。