我正在使用VBA编写Excel加载项,加载项使用本地配置文件。
此文件需要包含远程服务的密码
显然,将此密码存储为纯文本并不理想。但我正在寻找一种可以编码/解码文本的算法,因此它至少不会像配置文件中的明文那样看起来像。
我遇到了对Windows DPAPI 的引用,但我不确定这是否是Excel VBA的合适解决方案。我也不确定如何在VBA中使用此API,因为我只找到了将它与.NET一起使用的参考。 Visual Studio不适用于此项目。
因此,由两部分组成的问题是:
1)如果可以在VBA中使用DPAPI,我可以举一个使用它的例子吗?
2)如果无法在VBA中使用DPAPI,您对如何以某种可逆的编码方式存储文本有任何建议吗?
如果重要,解决方案必须在Excel 2003及更高版本中运行。
再次感谢你。
答案 0 :(得分:1)
如果重要,解决方案必须在Excel 2003及更高版本中运行。
对于Excel VBA,我建议使用CAPICOM库。
从here下载文件。安装完成后,请按照以下说明注册Dll。
32位操作系统
将文件Capicom.dll从C:\Program Files\Microsoft CAPICOM 2.1.0.2 SDK\Lib
复制到C:\Windows\System32
开始菜单 |下一步运行,输入此
Regsvr32 C:\Windows\System32\Capicom.dll
64位操作系统
将文件Capicom.dll从C:\Program Files (x86)\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86
复制到C:\Windows\SysWOW64
开始菜单 |下一步运行,输入此
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
解密字符串。运行上述Sub Sample