不幸的是,你的问题的答案是否定的。没有任何 Excel 密码是完全安全的。
\n\n但是,如果您的数据传输工具必须是 Excel,并且您正在尝试混淆 SQL 连接字符串(听起来您的问题就是这种情况),那么有关在 Excel 中混淆 SQL 连接字符串的文章将会有所帮助。尽管密码最终可以被逆向工程,但它不能以连接字符串中的纯文本形式读取,并且需要一定程度的理性才能逆向工程。
\n\n链接此处并完全归功于@Ruddles:https://www.mrexcel.com/forum/excel-questions/512040-data-connector-hide-password.html
\n\n为了防止未来可能出现的死链接,我冒昧地调换了以下信息:
\n\n来自网站:
\n\n\n\n\n您通过一些 VBA 处理密码,将其转换为\n 完全不同的字符串。然后,您可以将该字符串硬编码到 VBA 中,因为如果有人看到它,他们将无法使用它,因为它不是真正的密码。然后,当您需要在代码中使用密码时,您可以通过相反的过程运行它,并返回原始字符串。
\n\n您可以根据需要使代码变得简单或复杂 - 但如果有人看到该代码,他们可能有足够的知识来对过程进行逆向工程并恢复密码。它并没有真正加密,它只是为人们想要非法访问它增加了一个额外的障碍。另一方面,它可能会满足您的数据库安全专家的要求!
\n\n试试这个:创建一个新工作簿并打开 VBE (Alt-F11),然后转到\n“插入”>“模块”。将此代码粘贴到代码窗口中:-
\n
代码:
\n\nFunction Obfusc(oWord As String, nCrypt As Boolean) As String\n\n Dim iPtr As Integer\n Dim iByte As Byte\n\n For iPtr = 1 To Len(oWord)\n If nCrypt Then\n iByte = Asc(Mid(oWord, iPtr, 1)) + 99 + iPtr\n Else\n iByte = Asc(Mid(oWord, iPtr, 1)) - 99 - iPtr\n End If\n Obfusc = Obfusc & Chr(iByte)\n Next iPtr\n\nEnd Function\nRun Code Online (Sandbox Code Playgroud)\n\n(这是一个非常简单的例程 - 您可能想让它更复杂!)
\n\n在立即窗口中(Ctrl-R)键入?obfusc("MerryXmas#2010",true)并按 Enter 键。这将返回其混淆"Hello World!"版本"\xc2\xb1\xc3\x8a\xc3\x98\xc3\x99\xc3\xa1\xc3\x81\xc3\x97\xc3\x8c\xc3\x9f \xc5\xb8\xc2\xa1\xc2\xa1"。
现在输入?obfusc("\xc2\xb1\xc3\x8a\xc3\x98\xc3\x99\xc3\xa1\xc3\x81\xc3\x97\xc3\x8c\xc3\x9f \xc5\xb8\xc2\xa1\xc2\xa1",false)并按 Enter 键。(您可能必须复制并粘贴它!)这将返回原始字符串。
因此,在实际使用中,您可以通过键入
\n并将混淆的字符串粘贴到代码中来手动获取?obfusc("MerryXmas#2010",true)混淆的字符串,如下所示:-\n代码:"\xc2\xb1\xc3\x8a\xc3\x98\xc3\x99\xc3\xa1\xc3\x81\xc3\x97\xc3\x8c\xc3\x9f \xc5\xb8\xc2\xa1\xc2\xa1"
password = obfusc("\xc2\xac\xc2\xb1\xc3\x8a\xc3\x98\xc3\x99\xc3\xa1\xc3\x81\xc3\x97\xc3\x8c\xc3\x9f \xc5\xb8\xc2\xa1\xc2\xa1",False)\nconn_str = "Provider=SQLOLEDB.1;Password=" & password & ";Persist Security Info=True\nRun Code Online (Sandbox Code Playgroud)\n\n...等等”\n这就是总体思路。
\n\n如果您确实想深入了解混淆,可以按照此处的“教程”进行操作:\n如何在 VBA 中安全地存储连接字符串详细信息
\n