Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 我可以在VBA中使用DPAPI(或类似的东西)吗?_Excel_Dpapi_Vba - Fatal编程技术网

Excel 我可以在VBA中使用DPAPI(或类似的东西)吗?

Excel 我可以在VBA中使用DPAPI(或类似的东西)吗?,excel,dpapi,vba,Excel,Dpapi,Vba,关于VBA的初学者系列问题中的另一个 我正在VBA中编写Excel外接程序,该外接程序使用本地配置文件。 此文件需要包含远程服务的密码。 显然,将此密码存储为纯文本并不理想。但我正在寻找一种可以对文本进行编码/解码的算法,这样它至少在配置文件中看起来不像纯文本 我遇到了一个对WindowsDPAPI的引用,但我不确定这是否是Excel VBA的合适解决方案。我也不确定如何从VBA中使用这个API,因为我只找到了将它与.NET一起使用的参考资料。Visual Studio对此项目不可用 所以问题分

关于VBA的初学者系列问题中的另一个

我正在VBA中编写Excel外接程序,该外接程序使用本地配置文件。
此文件需要包含远程服务的密码。
显然,将此密码存储为纯文本并不理想。但我正在寻找一种可以对文本进行编码/解码的算法,这样它至少在配置文件中看起来不像纯文本

我遇到了一个对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读取和写入二进制文件的例子。我不想使用二进制文件格式,因为我希望用户能够手动编辑其他“非安全”配置选项(这几乎是所有内容,除了这个密码)。