この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 15992|答える: 1

【安全チュートリアル】 テンセントも使っています! ウェブファイルの改ざん防止システム(MD5暗号化実装)アンチハッキングチュートリアル

[リンクをコピー]
掲載地 2014/11/20 14:04:34 | | | |
MD5アルゴリズムの概要
MD5関数は情報の断片に(メッセージ)情報ダイジェストを生成する(メッセージダイジェスト)、概要は情報に固有のものです,デジタル署名として使用できます。 文書の有効性を検証するために使用されます(データの紛失や破損があるかどうか),ユーザーのパスワードの暗号化、ハッシュ値はハッシュ関数で計算されます。 任意の長さのバイトストリングを入力して生成します128ビットの整数です。 アルゴリズムの不可逆的な特性により、暗号化アプリケーションにおいて優れたセキュリティを持っています。 そしてMD5アルゴリズムの使用に著作権料の支払いは不要です。 一意性も不可逆性も絶対的ではなく、理論的には多対一の関係として分析しますが、異なる情報が同じ要約を生み出す確率は小さいです。 不可逆的とは、入力と出力を導き出すために必要な計算量と計算時間が大きすぎ、辞書検索の方法が記憶容量を多く必要とする場合を指します。
ウェブシステム設計アイデア
このシステムはJava Webに基づいています、そしてストラット2それを達成するために。 基本的な設計のアイデアはパスすることですウェブシステム外部メモリ内のファイルを2回計算するためにページを使いますMD5値と比較、同じであればファイルが改ざんされていない、異なる場合はファイルが改ざんされていることを意味します。
ウェブバージョンファイル改ざん防止システムの詳細設計案:可決JSP(日本警察サービス)システムの外部メモリで計算が必要なファイルを取得します。JSP(日本警察サービス)提出後、合格してくださいストラット2作戦値付きでジャンプジャワ論理層。 論理層において作戦ミディアムコール方法、計算はカプセル化されていますMD5価値。方法JSP(日本警察サービス)送ってくる書類や計算機MD5計算が完了したら、元の値のパスを返します作戦ファイルが計算されたのはこれが初めてですMD5価値を保存し、会期2つ目のものと比較できるようにMD5価値観。 最初の処刑が成功した後、次の段階にジャンプします。成功ページ。 次にファイルの2回目を始めますMD5計算も上記の方法で行われます。 計算後MD5値の後、2回目の計算が行われますMD5値は最初に計算されたものと同じで、セッション値が同じなら変化はありません。 もし違うなら、それは改ざんされている証拠です。
システム実装
ステップ1、Index.jspソースコード
<!-- Index.jspシステムストレージからファイルを追加してください-->
                <center>
                        <form action="fileCrypt" メソッド="get">
                                <table>
                                        <tr>
                                                <td>ファイル名:</td>
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
ステップ2、ストラット設定ファイルのソースコード
<!--ストラット2設定ファイル-->
<struts>
        <constant value="true" name="struts.devMode" />
        <constant value="zh_CN" name="struts.locale" />
        <constant value="utf-8" name="struts.i18n.encoding" />
       
        <パッケージ名="default" extends="struts-default">
                <action name="mdeAction" class="com.crypt.action.mdeAction"
                        method="codeCrype">
                        <結果名="成功">/index.jsp</result>
                </action>
                <action name="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <結果名="成功">/success.jsp</result>
                </action>
                <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" メソッド="SetCrypt2">
                        <結果名="成功">/FilnallySuccess.jsp</result>
                        <結果名="fail">/fail.jsp</result>
                </action>
</struts>   
3番目のステップは、struts2の後にFilesCryptActionにジャンプすることです
package com.crypt.action;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
輸入com.crypt.dao.Md5_dao;
import com.opensymphony.xwork2.ActionSupport;
import com.crypt.entity.Md5FilesEntity;
public class FilesCryptAction 拡張 ActionSupport {
        private Md5FilesEntity Md5FilesEntity = new Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                md5FilesEntityを返す;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        public String execute() は IOException { を投げます
                文字列ファイルコード = null;
                試してみて {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //最初に計算された時MD5値は一時的に保存されます。セッション中程度
                } catch (例外 e) {
                        TODO自動生成キャッチブロック
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                「成功」を返す;
        }
        public String SetCrypt2() {
                文字列ファイルコード2 = null;
                試してみて {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } catch (例外 e) {
                        TODO自動生成キャッチブロック
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        「成功」を返す;
                } そうでなければ {
                        「失敗」を返す;
                }
        }
}
          
4番目のステップでは、アクションが値付きのMd5_daoにジャンプし始めます
パッケージ com.crypt.dao;
輸入com.crypt.md5.Md5Crypt_1;
輸入com.crypt.md5.Md5Crypt_2;
パブリッククラスMd5_dao {
        public static String getFileCode(String fileName) は Exception { を投げます
                System.out.println(fileName);
                String hashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(hashCode);
                ハッシュコードを返す;
        }
}       
5番目のステップは、システム内でファイルのMD5値を計算するAPIを作成し、DAOで直接呼び出すことで、Md5Crypt_1メソッドで直接処理されます
パッケージ com.crypt.md5;
インポート java.io.*;
import java.security.*;
パブリッククラスMd5Crypt_1{
        public static char[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        「8'、'9'、'a'、'b'、'c'、'd'、'e'、'f' };
        public static void main(String[] args) は例外を投げる {
                文字列ファイル名 = "e:/111.txt";
                文字列ハッシュタイプ = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        public static String getHash(String fileName, String hashType)
                        Throws Exception {
                InputStream fis;
                fis = new FileInputStream(fileName);
                バイト[] バッファ = 新しいバイト[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                while ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                return toHexString(md5.digest());
        }
        public static string toHexString(byte[] b) {
                StringBuilder sb = 新しいStringBuilder(長さ×2); //文字列ジェネレーターを構築し、指定された文字列の内容に初期化します
                (int i = 0; 私はB.length<; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); 付録メソッドは常にこれらの文字を生成器の末尾に追加します。
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
ステップ6:ファイルのMD5の値を正常に計算した後、最初のMD5がセッション内で動作中に保存され、struts2構成ファイルの設定を通じてseccess.jspにジャンプし、初めて計算されたMD5値を表示し、2回目の計算を開始するよう促します。
Success.jspのソースコード:
<body>
   最初に計算された時MD5その値は:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:イテレーター>
       
                <center>
                        <form action="fileCrypt2" method="get">
                                <table>
                                        <tr>
                                                <td>ファイル名:</td>
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " rows="10" cols="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:イテレーター>
        </textarea>
                        </form>
                </center>
  </body>
ステップ7:2回目の提出を開始し、計算しますMD5上記の方法で再度計算した後、2回目の計算で値が計算されますMD5その値は、2回目の場合に最初の価値と比較されますMD5        同じであれば、改ざんが行われていないことを意味します。 もし二度でもMD5もし値が異なる場合は、文書が改ざんされている可能性があります。 こうして、システム全体が完成したのです。
文書改ざん防止システムテスト
システムをその場に置けトマクト 6.0上がって気づいてみてウェブ逃げろ。 以下はシステムのテスト図です:
ステップ1: 計算が必要なファイルを追加してください。 そして取り締まりを強めろ」開始「計算開始のためのボタンです。」

2番目のステップは計算されますMD5success.jsp最初の計算値を示しますMD5値、表示。 また、改ざんされていないかどうかを判断するための第二の計算も促されます。

第三のステップは、文書を改ざんせずに2回目の計算を行うことですMD5価値。 改ざんがなければ、ジャンプのないページが直接ジャンプされ、「ファイルは改ざんされていません」と表示されます。 もし改ざんされていれば、文書が改ざんされたことを示します。



ステップ4:ファイルを変更し、上記のテストを繰り返す
最初の計算:


計算が成功した後:

第五のステップは、意図的に文書を改ざんして計算することです。 原則として、文書は改ざんされ、2回計算されますMD5いいえ、比較するとファイルが改ざんされていることを知らせるはずです。


この時点で、システム全体のテストは完了します。







先の:優秀起業家協会は「廃棄物リサイクル、資源利用」活動を開催しました
次に:[C#] 12306 チケット強奪の根拠が実現
掲載地 2014/11/20 14:13:20 |
学んだ
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com