トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

ScrapCode/VBS/Convert

INDEX

VBScriptでのデータ変換

バイナリエンコード・デコード

 Microsoft.XMLDOMでHEX文字列

Microsoft.XMLDOM を使用し、バイナリデータの16進数文字列を求める。英字は小文字になる。

1
2
3
4
5
6
7
Set objDom = CreateObject("Microsoft.XMLDOM")
Set objElm = objDom.CreateElement("work")
objElm.DataType = "bin.hex"
objElm.NodeTypedValue = binData  ' バイナリデータ
strText = objElm.Text            ' 16進数文字列
Set objElm = Nothing
Set objDom = Nothing

 Microsoft.XMLDOMでBASE64エンコード

Microsoft.XMLDOM を使用し、マルチバイト文字やバイナリデータを64種類の印字可能な英数字のみのBASE64へエンコード処理をする。

1
2
3
4
5
6
7
8
Set objDom = CreateObject("Microsoft.XMLDOM")
Set objElm = objDom.CreateElement("work")
objElm.DataType = "bin.base64"
objElm.NodeTypedValue = binData  ' バイナリデータ
strText = objElm.Text            ' BASE64テキスト
'strText = Replace(objElm.Text, vbLf, vbCrLf)
Set objElm = Nothing
Set objDom = Nothing

得られるBASE64テキストの改行がLFなので、必要に応じてReplace関数で vbLf から vbCrLf に変更する。

 Microsoft.XMLDOMでBASE64デコード

Microsoft.XMLDOM を使用し、BASE64のテキストをデコード処理しデータを取得する。

1
2
3
4
5
6
7
Set objDom = CreateObject("Microsoft.XMLDOM")
Set objElm = objDom.CreateElement("work")
objElm.DataType = "bin.base64"
objElm.Text = strText            ' BASE64テキスト
binData = objElm.NodeTypedValue  ' バイナリデータ
Set objElm = Nothing
Set objDom = Nothing

 CAPICOMでHEX文字列

CAPICOM を使用し、バイナリデータの16進数文字列を求める。

1
2
3
Set objUtil = CreateObject("CAPICOM.Utilities")
strText = objUtil.BinaryToHex(binData)
Set objUtil = Nothing
1
2
3
Set objUtil = CreateObject("CAPICOM.Utilities")
binData = objUtil.HexToBinary(strText)
Set objUtil = Nothing

 CAPICOMでBASE64エンコード・デコード

CAPICOM を使用し、BASE64 エンコード・デコード処理をする。

1
2
3
Set objUtil = CreateObject("CAPICOM.Utilities")
strText = objUtil.Base64Encode(binData)
Set objUtil = Nothing
1
2
3
Set objUtil = CreateObject("CAPICOM.Utilities")
binData = objUtil.Base64Decode(strText)
Set objUtil = Nothing

一方向ハッシュ

 CAPICOMでハッシュ値

CAPICOM(Crypt API COM)を使ってハッシュ値を求める。文字列を渡した場合、UTF-16LE で求められる(WSH がそういうバイナリで渡していると思うけど WinXP, WSH 5.6)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
' CAPICOM's hash algorithm constants.
Const CAPICOM_HASH_ALGORITHM_SHA1      = 0
Const CAPICOM_HASH_ALGORITHM_MD2       = 1
Const CAPICOM_HASH_ALGORITHM_MD4       = 2
Const CAPICOM_HASH_ALGORITHM_MD5       = 3
Const CAPICOM_HASH_ALGORITHM_SHA256    = 4
Const CAPICOM_HASH_ALGORITHM_SHA384    = 5
Const CAPICOM_HASH_ALGORITHM_SHA512    = 6

Set objHash = CreateObject("CAPICOM.HashedData")
objHash.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1 ' アルゴリズム
objHash.Hash binData            ' データ
strHashValue = objHash.Value    ' ハッシュ値文字列
Set objHash = Nothing

 MS.NETでMD5ハッシュ値

Microsoft .NET Framework の暗号化サービスプロバイダを利用して、MD5のハッシュ値を求める。求めたハッシュ値もバイナリのままなので16進数文字列等に変換する必要がある。

1
2
3
4
Set objCSP = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
objCSP.ComputeHash_2(binData) ' データ
binHash = objCSP.Hash         ' ハッシュ値
Set objCSP = Nothing

 MS.NETでSHA1ハッシュ値

Microsoft .NET Framework の暗号化サービスプロバイダを利用して、SHA1のハッシュ値を求める。求めたハッシュ値もバイナリのままなので16進数文字列等に変換する必要がある。

1
2
3
4
Set objCSP = CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider")
objCSP.ComputeHash_2(binData) ' データ
binHash = objCSP.Hash         ' ハッシュ値
Set objCSP = Nothing

暗号化

Note CAPICOM does not support the PKCS #7 EncryptedData content type but uses a nonstandard ASN structure for EncryptedData. Therefore, only CAPICOM can decrypt a CAPICOM EncryptedData object.

http://msdn.microsoft.com/ja-jp/library/aa382010%28en-us,VS.85%29.aspx

CAPICOM よって暗号化したデータは、CAPICOM でしか復元できない。

暗号データは、非標準の ASN データ構造を BASE64 しているので、構造・要素を解析すれば、利用できる?AES のとき、常に結果が変わるので CBC モードで暗号化されているか。なので、ASN の中に IV の値も含まれている?

 CAPICOMで暗号化

CAPICOM(Crypt API COM)を使って共通鍵の暗号化する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
' CAPICOM's encryption algorithm constants.
Const CAPICOM_ENCRYPTION_ALGORITHM_RC2       = 0
Const CAPICOM_ENCRYPTION_ALGORITHM_RC4       = 1
Const CAPICOM_ENCRYPTION_ALGORITHM_DES       = 2
Const CAPICOM_ENCRYPTION_ALGORITHM_3DES      = 3
Const CAPICOM_ENCRYPTION_ALGORITHM_AES       = 4

' CAPICOM's encryption key length constants.
Const CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM  = 0
Const CAPICOM_ENCRYPTION_KEY_LENGTH_40_BITS  = 1
Const CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS  = 2
Const CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS = 3
Const CAPICOM_ENCRYPTION_KEY_LENGTH_192_BITS = 4
Const CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS = 5

Set objCrypt = CreateObject("CAPICOM.EncryptedData")
objCrypt.Algorithm.Name      = CAPICOM_ENCRYPTION_ALGORITHM_AES
objCrypt.Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM
objCrypt.SetSecret password  ' パスワード
objCrypt.Content = content   ' 平文
encrypt = objCrypt.Encrypt   ' 暗号文
Set objCrypt = Nothing

 CAPICOMで復号化

CAPICOM(Crypt API COM)を使って共通鍵の復号する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
' CAPICOM's encryption algorithm constants.
Const CAPICOM_ENCRYPTION_ALGORITHM_RC2       = 0
Const CAPICOM_ENCRYPTION_ALGORITHM_RC4       = 1
Const CAPICOM_ENCRYPTION_ALGORITHM_DES       = 2
Const CAPICOM_ENCRYPTION_ALGORITHM_3DES      = 3
Const CAPICOM_ENCRYPTION_ALGORITHM_AES       = 4

' CAPICOM's encryption key length constants.
Const CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM  = 0
Const CAPICOM_ENCRYPTION_KEY_LENGTH_40_BITS  = 1
Const CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS  = 2
Const CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS = 3
Const CAPICOM_ENCRYPTION_KEY_LENGTH_192_BITS = 4
Const CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS = 5

Set objCrypt = CreateObject("CAPICOM.EncryptedData")
objCrypt.Algorithm.Name      = CAPICOM_ENCRYPTION_ALGORITHM_AES
objCrypt.Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM
objCrypt.SetSecret password  ' パスワード
objCrypt.Decrypt decrypt     ' 暗号文
decrypt = objCrypt.Content   ' 平文
Set objCrypt = Nothing

最終更新時間:2010年01月29日 12時20分26秒 指摘や意見などあればSandBoxのBBSへ。