2010-08-22T18:51:26の更新内容

programming/tips/md5_base64/index.wiki.txt

current previous
1,159 1,31
 
${smdncms:title,MD5ハッシュ文字列の作成}
${smdncms:title,MD5ハッシュ文字列の作成}
~
${smdncms:keywords,MD5,BASE64,ハッシュ,md5_base64,MD5CryptoServiceProvider}
${smdncms:keywords,MD5,ハッシュ,md5_base64,MD5CryptoServiceProvider}
~
${smdncms:tags,std/md5,lang/perl,lang/vb,lang/c#,api/.net}
${smdncms:tags,std/md5,lang/perl,lang/vb,api/.net}
-
*Perlでは
-
#code(pl){{
-
use Digest::MD5 qw(md5_base64);
-
$source="hogehoge";
-
$md5hash_base64 = md5_base64($source);
-
}}
-

          
-
*VB.NETでは
-
Perlのmd5_base64と同じ出力を得るためには、22文字で切る必要がある。  [[参考資料:http://perldoc.jp/docs/modules/Digest-MD5-2.20/MD5.pod]]。
-

          
 

        

        
+
-関連するページ
+
--[[programming/tips/md5_cdrom]]
+
--[[programming/tips/cram_md5]]
+

          
+
*.NET
+
&msdn(netfx,type,System.Security.Cryptography.MD5){System.Security.Cryptography.MD5};クラスでMD5ハッシュ値、&msdn(netfx,method,System.Convert.ToBase64String){Convert.ToBase64String};メソッドでBASE64への変換ができる。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Security.Cryptography;
+
using System.Text;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    var source = "hogehoge";
+

          
+
    using (var md5 = MD5.Create()) {
+
      // MD5ハッシュ値を求める
+
      var md5hash = md5.ComputeHash(Encoding.UTF8.GetBytes(source));
+
      // もとめたハッシュ値をBASE64に変換する
+
      var md5hash_base64 = Convert.ToBase64String(md5hash);
+

          
+
      Console.WriteLine(md5hash_base64);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
 
#code(vb){{
#code(vb){{
~
Imports System
' MD5ハッシュ値を計算する
~
Imports System.Security.Cryptography
Dim source As String = "hogehoge"
+
Imports System.Text
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    Dim source As String = "hogehoge"
+

          
+
    Using md5 As MD5 = MD5.Create()
+
      ' MD5ハッシュ値を求める
+
      Dim md5hash As Byte() = md5.ComputeHash(Encoding.UTF8.GetBytes(source))
+
      ' もとめたハッシュ値をBASE64に変換する
+
      Dim md5hash_base64 As String = Convert.ToBase64String(md5hash)
+

          
+
      Console.WriteLine(md5hash_base64)
+
    End Using
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
 

        

        
~
CompluteHash()メソッドにStreamを渡すこともできるので、ファイルのハッシュ値を求めたい場合などはファイルを開いてStreamを渡せばよい。
Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider
 

        

        
~
#tabpage(C#)
Dim md5hash As Byte() = md5.ComputeHash(encoding.ASCII.GetBytes(source))
+
#code(cs){{
+
using System;
+
using System.IO;
+
using System.Security.Cryptography;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    using (var sourceStream = File.OpenRead("file.dat")) {
+
      using (var md5 = MD5.Create()) {
+
        // MD5ハッシュ値を求める
+
        var md5hash = md5.ComputeHash(sourceStream);
+
        // もとめたハッシュ値をBASE64に変換する
+
        var md5hash_base64 = Convert.ToBase64String(md5hash);
+

          
+
        Console.WriteLine(md5hash_base64);
+
      }
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.IO
+
Imports System.Security.Cryptography
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    Using sourceStream As Stream = File.OpenRead("file.dat")
+
      Using md5 As MD5 = md5.Create()
+
        ' MD5ハッシュ値を求める
+
        Dim md5hash As Byte() = md5.ComputeHash(sourceStream)
+
        ' もとめたハッシュ値をBASE64に変換する
+
        Dim md5hash_base64 As String = Convert.ToBase64String(md5hash)
+

          
+
        Console.WriteLine(md5hash_base64)
+
      End Using
+
    End Using
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
 

        

        
~
&msdn(netfx,type,System.Security.Cryptography.SHA512){SHA256};クラスなど&msdn(netfx,type,System.Security.Cryptography.HashAlgorithm){HashAlgorithm};の派生クラスを用いることで、MD5以外のハッシュ値を求めることもできる。
Dim md5hash_base64 As String = Convert.ToBase64String(md5hash)
 

        

        
~
#tabpage(C#)
' 22文字にする(Perlのmd5_base64の出力にあわせる)
~
#code(cs){{
If 22 < md5hash_base64.Length Then md5hash_base64 = md5hash_base64.Substring(0, 22)
+
using System;
+
using System.Security.Cryptography;
+
using System.Text;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    var source = "hogehoge";
+

          
+
    using (var sha256 = SHA256.Create()) {
+
      // SHA256ハッシュ値を求める
+
      var sha256hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(source));
+
      // もとめたハッシュ値をBASE64に変換する
+
      var sha256hash_base64 = Convert.ToBase64String(sha256hash);
+

          
+
      Console.WriteLine(sha256hash_base64);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Security.Cryptography
+
Imports System.Text
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    Dim source As String = "hogehoge"
+

          
+
    Using sha256 As SHA256 = SHA256.Create()
+
      ' SHA256ハッシュ値を求める
+
      Dim sha256hash As Byte() = sha256.ComputeHash(Encoding.UTF8.GetBytes(source))
+
      ' もとめたハッシュ値をBASE64に変換する
+
      Dim sha256hash_base64 As String = Convert.ToBase64String(sha256hash)
+

          
+
      Console.WriteLine(sha256hash_base64)
+
    End Using
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
 

        

        
~
*Perl
' できあがり
~
#code(pl){{
Console.WriteLine(md5hash_base64)
+
use Digest::MD5 qw(md5_base64);
+
$source="hogehoge";
+
$md5hash_base64 = md5_base64($source);
 
}}
}}
 

        

        
+
-[[Digest::MD5 - MD5アルゴリズムへのPerlインターフェース:http://perldoc.jp/docs/modules/Digest-MD5-2.20/MD5.pod]]
+

          

programming/tips/findmimetype/index.wiki.txt

current previous
1,25 1,24
 
${smdncms:title,MIMEタイプの取得・判定}
${smdncms:title,MIMEタイプの取得・判定}
~
${smdncms:keywords,MIME,タイプ,判定,判別,拡張子}
${smdncms:keywords,MIME,タイプ,判定,拡張子}
~
${smdncms:tags,lang/c#,lang/vb,plat/win,api/win32,api/.net}
${smdncms:tags,lang/c#,plat/win,api/win32,api/.net}
 
#googleadunit
#googleadunit
 

        

        
 
*拡張子からのMIMEタイプの取得
*拡張子からのMIMEタイプの取得
 
Windowsの場合、レジストリのHKEY_CLASSES_ROOTに、拡張子毎にアプリケーションの関連付けなどの情報が格納されている。 目的の拡張子をキーとしたノードにContent Typeの値が登録されている場合は、その値を使用できる。
Windowsの場合、レジストリのHKEY_CLASSES_ROOTに、拡張子毎にアプリケーションの関連付けなどの情報が格納されている。 目的の拡張子をキーとしたノードにContent Typeの値が登録されている場合は、その値を使用できる。
+
#tabpage(C#)
 
#code(cs){{
#code(cs){{
 
private static string GetMimeTypeByExtension(string extension)
private static string GetMimeTypeByExtension(string extension)
 
{
{
~
  const string defaultType = "application/octet-stream";
  const string @default = "application/octet-stream";
 

        

        
 
  var key = Registry.ClassesRoot.OpenSubKey(extension);
  var key = Registry.ClassesRoot.OpenSubKey(extension);
 

        

        
 
  if (key == null)
  if (key == null)
~
    return defaultType;
    return @default;
 

        

        
 
  var mimeType = key.GetValue("Content Type");
  var mimeType = key.GetValue("Content Type");
 

        

        
 
  if (mimeType == null)
  if (mimeType == null)
~
    return defaultType;
    return @default;
 
  else
  else
 
    return (string)mimeType;
    return (string)mimeType;
 
}
}
39,39 38,6
 
  }
  }
 
}
}
 
}}
}}
+
#tabpage(VB)
+
#code(vb){{
+
Private Shared Function GetMimeTypeByExtension(ByVal extension As String) As String
+
  Const defaultType As String = "application/octet-stream"
+

          
+
  Dim key As RegistryKey = Registry.ClassesRoot.OpenSubKey(extension)
+

          
+
  If key Is Nothing Then Return defaultType
+

          
+
  Dim mimeType As Object = key.GetValue("Content Type")
+

          
+
  If mimeType Is Nothing Then
+
    Return defaultType
+
  Else
+
    Return CStr(mimeType)
+
  End If
+
End Function
+

          
+
Public Shared Sub Main()
+
  Dim extensions As String() = New String() {
+
    ".txt", ".eml", ".html", _
+
    ".jpg", ".bmp", ".wav", _
+
    ".mp4", _
+
    ".exe", ".dll", ".bin", _
+
    ".zip", ".tar.gz" _
+
  }
+

          
+
  For Each extension As String In extensions
+
    Console.WriteLine("{0} => {1}", extension, GetMimeTypeByExtension(extension))
+
  Next
+
End Sub
+
}}
+
#tabpage-end
 

        

        
 
#prompt(実行結果){{
#prompt(実行結果){{
 
.txt => text/plain
.txt => text/plain