asp.Net md 5暗号化を実現

2505 ワード

MD 5暗号化は簡単に言えば、ある明文を何らかの演算方式で密文を求めることである.例えば、abcdefgは、いくつかの列演算によって暗号文7 ac 66 c 0 f 148 de 9519 b 8 bd 264312 c 4 d 64を得る
2つの特性があります.1.衝突なし、2.不可逆.
衝突なしとは、7 ac 66 c 0 f 148 de 9519 b 8 bd 264312 c 4 d 64という暗号文はabcdefgという暗号文でしか得られないが、それ以外の暗号文が暗号化された後の値は、7 ac 66 c 0 f 148 de 9519 b 8 bd 264312 c 4 d 64に等しくない.つまり、その2つの暗号文が暗号化されていないと同じ暗号文が得られる.
不可逆とは、明文が暗号化されて暗号文が得られ、暗号文で明文が求められないことを意味する.すなわち、明文adcdefgが暗号化によって7 ac 66 c 0 f 148 de 9519 b 8 bd 264312 c 4 d 64を得ることができることを知っていたが、ある文字の暗号化を知って7 ac 66 c 0 f 148 de 9519 b 8 bd 264312 c 4 d 64を得ると、7 ac 66 c 0 f 148 de 9519 b 8 bd 264312 c 4 d 64という文字が誰によって暗号化されたのかを算出することができなかった.
では、ある学生は必ず、具体的にどこで運用すべきかと聞かれます.
一般的に、私たちはウェブサイトのログインシステムを作るときにパスワードが暗号化されて保存され、一般的にMD 5暗号化されています.
ユーザーはユーザー名のパスワードを記入して登録をクリックした後、私たちは検証に合格し、ユーザー情報をデータベースに保存するには、まずユーザーが入力したパスワードをMD 5で暗号化する方法で、暗号化された秘密文を、パスワードのフィールドに保存する必要があります.
では、MD 5の暗号化が不可逆的であることについても言及したが、ユーザーがログインしたときにユーザーが入力したパスワードが正しいかどうかをどのように判断するのか、注意深い発見があるに違いない.
例えば、ユーザが設定したパスワードはabcdefgであり、記憶時に我々が記憶しているのはabcdefgが暗号化された値7 ac 66 c 0 f 148 de 9519 b 8 bd 264312 c 4 d 64であるが、ユーザが再登録する際にパスワードabcdefgを入力し、両者が等しいかどうかをどのように比較するか.
暗号化された値から暗号化前の値を換算することはできません.そのため、ユーザーが再ログインしたときに入力したパスワードをデータベースに格納されている値と再暗号化し、等しい場合は入力したパスワードが正しいことを示します.
OK、基本原理と運用シーンの基本的な違いは多くありませんが、最後にASPについてお話しします.NETでMD 5暗号化を行う方法.
ASP.NETにおけるMD 5の暗号化方式は簡単で、コードは以下の通りである.


FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
なお、MD 5が暗号化されているときに小文字に変換されている場合は、検証時にも小文字に変換され、統一されていることに注意してください.なお、上記の方式は32ビットのMD 5暗号化方式であり、16ビットであれば32ビット暗号化結果の中間16ビットの値を取ればよい.ここには例がありますが、参考にしてください.


///
 /// MD5
 ///

 ///
 /// 32
 public static string Get_MD5(string strSource, string sEncode)
 {
     //new
     System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

     //
     byte[] bytResult = md5.ComputeHash(System.Text.Encoding.GetEncoding(sEncode).GetBytes(strSource));

     // , 9 25
     //string strResult = BitConverter.ToString(bytResult, 4, 8); 
     // ,32

     string strResult = BitConverter.ToString(bytResult);

     //BitConverter ,
     strResult = strResult.Replace("-", "");

     return strResult.ToLower();
 }