pythonプロジェクトのまとめ

6189 ワード

最近pythonのツールを書いて、まとめてみます.
  • type( )#は、
  • の処理を容易にするために変数タイプを印刷することができる.
  • len(var)#取得可能タイプ長
  • binascii.a2b_hex(string)#16進数文字列をバイナリデータに変換します.この関数はunhexlify(string)
  • とも呼ばれる.
  • binascii.b2a_hex(string) python文字列と16進数相互回転
  • pythonオブジェクトのすべての属性値を印刷する方法.
    def prn_obj(obj): 
      print '
    '.join(['%s:%s' % item for item in obj.__dict__.items()])
    以上は、あるオブジェクトの全ての属性値を印刷する方法
  • である.
  • pythonオブジェクト情報
  • を取得する
  • pdbデバッグ[pythonデバッグ方法](pythonデバッグ方法)https://www.cnblogs.com/skyus/p/7210234.html)
  • plain_text.rstrip('\0')#削除文字列末尾0文字
  • protocol Buffers Now that you have a .proto,the next thing you need to do is generate the classes you’ll need to read and write AddressBook(and hence Person and PhoneNumber)messages.To do this, you need to run the protocol buffer compiler protoc on your .proto : If you haven’t installed the compiler, download the package and follow the instructions in the README. Now run the compiler, specifying the source directory (where your application’s source code lives – the current directory is used if you don’t provide a value), the destination directory (where you want the generated code to go; often the same as $SRC_DIR ), and the path to your .proto. In this case, you…: protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/addressbook.proto Because you want Python classes, you use the --python_out option – similar options are provided for other supported languages. This generates addressbook_pb2.py in your specified destination directory.
  • hashlib.sha256(data)#計算dataのハッシュ値
    >>> import hashlib
    >>> a = hashlib.sha256('aaaa')
    >>> a.update('bbbb')  #                 
    >>> a.digest()
    '\xe5\xc1\xed\xb5\x0f\xf8\xb4\xfc\xc3\xea\xd3\xa8E\xff\xbe\x1a\xd5\x1c\x9d\xae]D3Z\\3;W\xac\x8d\xf0b'
    >>> b = hashlib.sha256('aaaabbbb') #      update          
    >>> b.digest()
    '\xe5\xc1\xed\xb5\x0f\xf8\xb4\xfc\xc3\xea\xd3\xa8E\xff\xbe\x1a\xd5\x1c\x9d\xae]D3Z\\3;W\xac\x8d\xf0b'
    >>> b.hexdigest()  #          
    'e5c1edb50ff8b4fcc3ead3a845ffbe1ad51c9dae5d44335a5c333b57ac8df062'
    
    python hashlibモジュール
  • loggingログ・レベル、ネット上の例は
  • が多い
  • python structモジュールバイト順の問題を解決し、バイト位置合わせ、
    self.version = struct.unpack('>Q', payload_file.read(8))[0]
    self.manifest_len = struct.unpack('>Q', payload_file.read(8))[0] 
    self.metadata_signature_len = struct.unpack('>I', payload_file.read(4))[0]
    
    Pythonのstruct概要Pythonのstructモジュール
  • を浅く分析する
  • 「openssl」という比較的複雑な
     def _CheckSha256Signature(sig_data, cert_file_name, actual_hash, sig_name):
        if len(sig_data) != 256:
          logger.info('%s: signature size (%d) not as expected (256).' % sig_name, len(sig_data))
        signed_data, err = RunCommand(['openssl', 'rsautl', '-verify', '-certin', '-inkey', cert_file_name ], send_data=sig_data)
    
        if len(signed_data) != len(SIG_ASN1_HEADER) + 32:
          logger.info('%s: unexpected signed data length (%d).', sig_name, len(signed_data))
    
        if not signed_data.startswith(SIG_ASN1_HEADER):
          logger.info('%s: not containing standard ASN.1 prefix.', sig_name)
    
        signed_hash = signed_data[len(SIG_ASN1_HEADER):]
        if signed_hash != actual_hash:
          logger.info('%s: signed hash (%s) different from actual (%s).', sig_name, signed_hash.encode('base64').strip(), 
    
    直接入力openssl x509 -in ca.crt -pubkeyでは、der形式のファイルの公開鍵ファイルに変換すると、確かに2つの公開鍵出力が表示されます.これにより、公開鍵openssl x509 -in ca.crt -inform PEM -out ca.der -outform DERを抽出する余分な出力openssl x509 -in out/otacert -pubkey -noout > pubkey.pemがない/公開鍵を用いて検証する/$ openssl rsautl -verify -in sign1.txt -inkey pub.pem -pubin -out replain1.txt/秘密鍵を用いて署名する/$ openssl rsautl -sign -in plain.txt -inkey pri.pem -out sign1.txt公開鍵暗号化openssl rsautl -encrypt -inkey publickey.pem -pubin -in key.bin -out key.bin.enがkpcs 8を変換する.pem秘密鍵openssl pkcs8 -inform DER -nocrypt -in testkey.pk8 -out testkey.pemは直接証明書を使用して署名を行い、実際には公開鍵openssl rsautl -verify -certin -inkey out/otacert -in old_data -out replain.txtを使用してopensslを使用して証明書を生成する(openssl詳細を含む)https://blog.csdn.net/gengxiaoming7/article/details/78505107
  • AES 128対称暗号化AES暗号化アルゴリズムの詳細と実装
  • subprocessモジュール
    def RunCommand(command, send_data = None):
      logger.info('Running command, please wait....')
      logger.debug('command: %s', command)
      child = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
      try:
        result, err = child.communicate(input = send_data)#        .      
      finally:
        exit_code = child.wait()
      if exit_code:
        raise RuntimeError('Subprocess %r failed with code %r.' %
                           (command, exit_code))
      return result, exit_code
    
  • import argparseモジュール
    import argparse
    parser=argparse.ArgumentParser()
    parser.add_argument("echo",help="echo the string")
    args=parser.parse_args()
    print args.echo
    
    Pythonコマンドライン解析argparse共通構文使用概要
  • 埋め込み文字列
    from binascii import b2a_hex, a2b_hex 
    h = 'AAA' 
    print b2a_hex(he.ljust(16, '\000')) #output: 41414100000000000000000000000000
    
  • (注意):ここでの'\000'はエスケープ文字であり、asciiではNULを表し、文字'0'、二つのものである.以下は一部のASCII表です
    Dec Hex
    Dec Hex
    Dec Hex
    Dec Hex
    Dec Hex
    Dec Hex
    Dec Hex
    Dec Hex
    0 00 NUL
    16 10 DLE
    32 20
    48 30 0
    64 40 @
    80 50 P
    96 60 `
    112 70 p
    1 01 SOH
    17 11 DC1
    33 21 !
    49 31 1
    65 41 A
    81 51 Q
    97 61 a
    113 71 q
    2 02 STX
    18 12 DC2
    34 22 "
    50 32 2
    66 42 B
    82 52 R
    98 62 b
    114 72 r