hashlibの暗号化
1ハッシュとは何ですか
ハッシュ、一般的には「ハッシュ」、つまり、任意の長さの入力(また、プレマッピング、プリ画像と呼ばれる)、ハッシュアルゴリズムを介して、出力に変換された固定長の直接音訳を有し、「ハッシュ」を行うために、翻訳出力はハッシュ値です。この変換は、圧縮マップであり、すなわち、空間ハッシュ値は、典型的には、入力空間よりもはるかに小さい、異なる入力が同じ出力にハッシュ、一意のハッシュ値から入力値を決定することは不可能であることができます。
単に固定長のメッセージダイジェストの圧縮関数に任意の長さAのメッセージことを意味します。
2 MD5
MD5メッセージダイジェストアルゴリズム(英語:MD5メッセージダイジェストアルゴリズム)を使用広くヘテロパスワードハッシュ関数は、完全かつ一貫性を保証するために128ビットのハッシュ値(ハッシュ値)、情報伝送を生成することができます。MD5の前身は、MD2、MD3とMD4を持っていました。
MD5機能:
- 処理後の任意の長さの入力情報は、情報(デジタル指紋)の出力128。
- 得られた異なる入力異なる結果(一意)
MD5の特徴:
- 圧縮率:任意のデータ長、MD5値の長さが固定されて算出されます
- 容易に計算:MD5の値を容易に元のデータから計算されます
- アンチ変更は:元のデータは、変更を加える素晴らしいものだバイトMD5世代間の差の値を変更するには
- 強力な衝突防止:オリジナルデータと知られているMD5、(すなわち、データを偽造)のデータを検索するには、同じMD5値を持つことは非常に困難です。
3 SHA-1
セキュアハッシュアルゴリズム(セキュアハッシュアルゴリズム)は、主にデジタル署名アルゴリズム(デジタル署名アルゴリズムDSA)を定義するデジタル署名標準(デジタル署名標準DSS)に適用されます。メッセージの長さが2未満^ 64ビットであるため、SHA1は、160ビットのメッセージダイジェストを生成します。メッセージを受信すると、メッセージダイジェストは、データの整合性を検証するために使用することができます。
MD5とSHA-1の比較:
MD5とSHA-1はMD4から開発されるにつれて、その構造および強度の特性は多くの類似点を持って、MD5とSHA-1の間の最大の差は、MD5ダイジェストのより長い32ビットであることをダイジェスト。ブルートフォース攻撃のために、任意のパケットは、そのように指定されたメッセージダイジェストは、ダイジェスト困難に等しい:MD5は、操作2128の大きさで、SHA-1 2160回の動作の順番です。同一のダイジェストを持つ2つのパケットを生成することの難しさ:MD5は、操作264のオーダーである、SHA-1は、280の操作の順序です。したがって、より大きなSHA-1は、フォース攻撃の対を提供します。しかし、複数の大きな160ビットを処理するために80:64とMD5より手順のキャッシュSHA-1ループ以降:128ビット、MD5よりSHA-1動作速度も遅いです。
関連モジュール4のPython
暗号化関連、3.xの主SHA1、SHA224、SHA256、SHA384、SHA512、MD5アルゴリズムを提供し、hashlib用のMD5、SHAモジュールとモジュールと交換した動作のために
インポートhashlib #はMD5 M = hashlib.md5() m.update(B " ハロー" ) (B m.update " それは私APOS " ) プリント(m.digest()) #は、バイナリ形式のハッシュ値を返し m.updateを(B "APOSあっWE ...前回長時間操作" ) プリント(m.hexdigest()) #16進数形式でハッシュ値を返す #SHA1 S1 = hashlib.sha1() s1.update(「アブラナ科サークル" .encode(" UTF-8 " )) s1.hexdigest() #SHA256 S256 = hashlib.sha256() s256.update(" 小猿圈" .encode(" UTF-8 " )) s256.hexdigest() #SHA512 S512 = hashlib.sha256() s512.update(" 小猿圈" .encode(" UTF-8 " )) s512.hexdigest()
二つのロギングモジュール
Pythonのロギングモジュールは、主に、操作ログを出力するために、標準モジュールを構築され、ログ出力レベルは、ログ・パスを保存設定することができ、ログファイルのロールバックなど、印刷に比べ、以下の利点を有します。
- あなたは、デバッグ情報の多くを示しすることなく重要な情報のみのリリースバージョンでの出力を別のログレベルを設定することができます
- すべての印刷情報は真剣に、標準出力からのデータを表示する他の開発者に影響を与え、標準出力に出力され、ログはどこで、どのように出力するための出力情報を開発者が決定することができます
「」「 ログファイルに出力されます (TestLog「レベル= logging.info logging.basicConfigファイル名=」) logging.debug(このメッセージは、ログをファイルに行くべき『)」 logging.info(』そうなら、この『) 』 '' '' ' カスタムログ形式 logging.basicConfig(フォーマット=' %(いるasctime)S%(メッセージ)S」 、:%のM%のS datefmt =「%D %% Y-M-%I」 のファイル名を=「TestLog」、 レベル= logging.DEBUG) logging.debug(「タイムテスト」) 「」「 」「」 の各コンポーネントの主な機能 ロガーを すべてのプログラム一般ロガーに対応する情報を出力する前に取得したロガー、 MySQLのようなプログラムのモジュール名、 LOG = logging.getLogger(「MySQLの」) このモジュールのコアができ LOG = logging.getLogger(「chat.kernel」) 、また、ハンドラとフィルタをバインド Logger.setLevel(LEL)を:レベルLELよりも低く、最低限のログレベルを指定しますが無視され、debubが構築されている最低レベルの Logger.addFilter(FILTを):指定したフィルタ追加 Logger.removeFilter(FILTを) :指定したフィルタを削除 Logger.addHandler(hdlrを):指定したハンドラ追加 ハンドラ ハンドラオブジェクトは、指定された宛先に関連した情報を送信するための責任があり、さまざまなハンドラを使用することができますPythonのロギングシステム、いくつかのハンドラ できるコンソールに出力情報、いくつかのハンドラをファイルに出力することができ、かつ遊びがネットワークに送信することができる Handler.setLevel(LEL):情報処理のレベルを指定し、情報を無視レベルLELより低い Handler.setFormatter():フォーマットハンドラに設定します " 「」 「'」 変数は、次の表に許容することができるFMT。 %(名前)Sロガー名 %(levelno)のデジタル形式のログレベル %(levelname)のテキスト形式のログ・レベルで モジュールのログ出力機能の完全なパス名に%(パス名)の呼び出しではないかもしれない (ファイル名)%モジュールのログ出力機能を呼び出すのファイル名 %を(モジュール)のコールログ出力機能モジュール名| |%(FUNCNAME)Sコールログ出力機能の機能名 コードステートメント%の線(LINENO)Dコールログ出力機能配置 時間の表現のUNIX標準浮動小数点表現と現在時刻のF%(作成)| %(relativeCreated |)、ロガーからのミリ秒数は、ときD出力ログ情報作成 %(いるasctime)S文字列現在の時間を。デフォルトの形式は「2003-07-0816:49:45896」です。カンマの後のミリ %(スレッド)DスレッドID。それは持っていないかもしれません %(のthreadName)■スレッド名を。ではないかもしれない DプロセスID%(プロセス)。月ではない %(メッセージ)■ユーザ出力メッセージ 「」「 クラスIgnoreBackupLogFilter(logging.Filter): 」「」ログインするには、DBバックアップとごくわずかである「」「 DEF フィルタ(セルフ、レコード): リターン 」DBのバックアップ」 ない で録音.getMessage() からのログのインポートハンドラは #対数オブジェクトを生成し、グローバル設定 ロガー= logging.getLogger(「MySQLの」) Logger.setLevel(logging.DEBUGを) #ロガーにフィルタオブジェクトを追加 logger.addFilter(IgnoreBackupLogFilter()) #作成画面ハンドラとファイルオブジェクトオブジェクト・ハンドラ CH = logging.StreamHandler() #FH = logging.FileHandler( 'のMySQL') #は、ローリングログファイル設定 FH = handlers.RotatingFileHandler(' MySQLを'、MAXBYTES = 10、= BACKUPCOUNT。3 ) #は、ログレベル・ハンドラを設定します ch.setLevel(logging.DEBUG) fh.setLevel(logging.info) #ハンドラオブジェクトをロガーにバインドされ logger.addHandler(CH) logger.addHandler(FH) #生成フォーマッタ对象 file_formatter = logging.Formatter(' %(いるasctime)S - %(名)S - %(levelname)S - %(メッセージ)S '、datefmt = ' %Y-%M - %D%I:%のM:%のS ' ) console_formatter = logging.Formatter(' %(いるasctime)S - %(名)S - %(levelname)S - %(メッセージ)S 'datefmt = ' %Y - %M-%D%I:%M:%Sの' ) #の把フォーマッタ对象绑定ハンドラ对象の ch.setFormatter(console_formatter) fh.setFormatter(file_formatter) logger.debug(' DBバックアップ' ) logger.debug(' テテ' ) logger.debug(' DBバックアップSDF ') logger.warning(' sdfdsf ')