SHA1の16進数文字列を生成
レガシーASPで、SHA1の16進数文字列を生成してみました。
.NETの相互運用機能を利用しているのか・・・な。
Windows Server 2003 とかでも、.Net Framework 2.0 が入っていれば、動くと思われます。Server.CreateObject を、CreateObject にすれば、VBSとかWSHでも動きそうです。(未確認)
ソース
Function GetSHA1(ByVal plainText) Dim objEnc Dim objSHA1 Dim objStream Dim byteTmp Dim outText Set objEnc = Server.CreateObject("System.Text.UnicodeEncoding") Set objSHA1 = Server.CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider") Set objStream = Server.CreateObject("System.IO.MemoryStream") ' SHA1を算出 Call objSHA1.ComputeHash_2( objEnc.GetBytes_4(plainText) ) ' 算出結果を、メモリストリームへ保存 Call objStream.Write(objSHA1.Hash(), 0, (objSHA1.HashSize / 8)) objStream.Position = 0 Do ' 1バイトずつ読み取り。 byteTmp = objStream.ReadByte() ' 最後まで読むと、読み取り結果が、-1になる。 If byteTmp = -1 Then Exit Do ' 16進数へ変換 outText = outText & Right("00" & Hex( byteTmp ), 2) Loop Call objStream.Close() Set objStream = Nothing Set objSHA1 = Nothing Set objEnc = Nothing GetSHA1 = outText End Function
ソースは、http://d.hatena.ne.jp/Fio/20080826/p1 を、参考にさせていただきました。情報、ありがとうございます!
そこでは、MSXML2を使用されていたので、何とか.NETだけで出来ないかと模索し、こんなかんじになりました。
リファレンスが見つけられなかったので憶測ですが、例えば、ComputeHash_2 とかの _2 は、ComputeHash が、Overload されていて、2つ目を使うということのようです。
CreateObjectできるものは、.NET Framework の全ての名前空間では無いようです。OLE-COM Object Viewer があると分かりやすいですが、管理ツールのコンポーネント サービスを使ったり、レジストリを調べる方法があるかと思います。