CAPICOM でのメッセージの暗号化
[CAPICOM は、Windows Server 2008、Windows Vista、および Windows XP のオペレーティング システムで使用できる 32 ビットのみのコンポーネントです。 代わりに、.NET Frameworkを使用してセキュリティ機能を実装します。 詳細については、「 CAPICOM の使用に代わる方法」を参照してください。
このサブルーチンは、暗号化される文字列、暗号化キーの生成に使用されるパスワード文字列、および暗号化されたメッセージが書き込まれるファイルの名前を受け取ります。 すべてのパラメーターは、値によってサブルーチンに渡されます。 メッセージの暗号化を解除するには、同じパスワード文字列を使用する必要があります。 パスワードが失われた場合、テキストの暗号化を解除できません。 意図しない受信者がパスワードにアクセスすると、メッセージのプライバシーが失われます。
注意
CAPICOM は PKCS #7 EncryptedData コンテンツ タイプをサポートしていませんが、EncryptedData には非標準の ASN 構造を使用します。 その結果、CAPICOM EncryptedData オブジェクトの暗号化を解除できるのは CAPICOM だけです。
CAPICOM エラーの場合、 Err.Number プロパティの負の 10 進数の値が返されます。 詳細については、「 CAPICOM_ERROR_CODE」を参照してください。 Err.Number の正の 10 進数の値については、「Winerror.h」を参照してください。
Sub EncryptMessage(ByVal TobeEncrypted As String, ByVal hidden _
As String, ByVal filename As String)
On Error GoTo ErrorHandler
' Declare and initialize an EncryptedData object.
' Algorithm.Name and KeyLength do not need to be set.
Dim message As New EncryptedData
message.Content = Tobeencrypted
message.SetSecret(hidden)
' Optionally, the encryption algorithm and key length can be set.
' If these properties are not set, the default algorithm and key
' length are used.
' Information about the algorithm and key length is saved with
' the encrypted string and the individual decrypting the message
' does not need to set these properties.
message.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_DES
' Declare the string that will hold the encrypted message.
Dim encryptedmessage As String
' Encrypt the message storing the result in the encryptedmessage
' string.
encryptedmessage = message.Encrypt
' Optionally, check the length of the encrypted string to
' make sure that the encrypt method worked.
If Len(encryptedmessage) < 1 Then
MsgBox("no message encrypted. ")
Else
MsgBox(" Message is " & Len(encryptedmessage) & " characters")
' Open an output file and write the encrypted message to the
' file. The file is not opened if there is no message
' to write.
Open filename For Output As #1
Write #1, encryptedmessage
Close #1
MsgBox("Encrypted message written to file ")
End If
' Release the EncryptedData object.
message = Nothing
Exit Sub
ErrorHandler:
If Err.Number > 0 Then
MsgBox("Visual Basic error found:" & Err.Description)
Else
MsgBox("CAPICOM error found : " & Err.Number)
End If
End Sub