2

VBA に関する初心者向けの一連の質問のもう 1 つです。

VBA で Excel アドインを作成中ですが、アドインはローカル構成ファイルを使用します。
このファイルには、リモート サービスのパスワードが含まれている必要があります。
明らかに、このパスワードをプレーンテキストとして保存することは理想的ではありません。しかし、少なくとも構成ファイルでプレーンテキストのように 見えないように、テキストをエンコード/デコードできるアルゴリズムを探しています。

Windows DPAPIへの参照を見つけましたが、これが Excel VBA の適切なソリューションであるかどうかはわかりません。また、VBA 内からこの API を使用する方法もわかりません。.NET での使用に関する参照しか見つけられなかったからです。このプロジェクトでは Visual Studio を使用できません。

したがって、2 部構成の質問は次のとおりです
。1) VBA 内から DPAPI を使用できる場合、その使用例を教えてください。
2) VBA で DPAPI を使用できない場合、可逆的なエンコード方式でテキストを保存する方法について何か提案はありますか?

問題がある場合、ソリューションは Excel 2003 以降で機能する必要があります。

もう一度ありがとう。

4

1 に答える 1

1

問題がある場合、ソリューションは Excel 2003 以降で機能する必要があります。

Excel VBA については、CAPICOM ライブラリを使用することをお勧めします。

ここからファイルをダウンロードします。インストールしたら、次の手順に従って Dll を登録します。

32ビットOS

ファイル Capicom.dll を から にコピーしますC:\Program Files\Microsoft CAPICOM 2.1.0.2 SDK\LibC:\Windows\System32

スタート メニューの次へ| 実行して、これを入力します

Regsvr32 C:\Windows\System32\Capicom.dll

64 ビット OS

ファイル Capicom.dll を から にコピーしますC:\Program Files (x86)\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86C:\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

ここに画像の説明を入力

于 2012-06-12T00:52:29.793 に答える