INDEX
VBScriptでのデータ変換
バイナリエンコード・デコード
Microsoft.XMLDOMでHEX文字列
Microsoft.XMLDOM を使用し、バイナリデータの16進数文字列を求める。英字は小文字になる。
1 |
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 |
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 |
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 |
Set objUtil = CreateObject("CAPICOM.Utilities")
strText = objUtil.BinaryToHex(binData)
Set objUtil = Nothing
|
1 |
Set objUtil = CreateObject("CAPICOM.Utilities")
binData = objUtil.HexToBinary(strText)
Set objUtil = Nothing
|
CAPICOMでBASE64エンコード・デコード
CAPICOM を使用し、BASE64 エンコード・デコード処理をする。
1 |
Set objUtil = CreateObject("CAPICOM.Utilities")
strText = objUtil.Base64Encode(binData)
Set objUtil = Nothing
|
1 |
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 |
' 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 |
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 |
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 |
' 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 |
' 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へ。