[CTF]python crc 32値を求める方法

2157 ワード

python crc 32値を求める方法
この例では、pythonがcrc 32値を求める方法について説明します.皆さんの参考にしてください.具体的な実現方法は以下の通りである:CRC値を求めるには、先にimport binasciibinascii.crc 32(v)はvのcrc 32値を求め、これはlong型であり、形は−1456387 L、この値&0 xffffffで得られた値は48 a 213 Lの形である.そしてこの値を16進数で表します
Python2
import binascii
def _crc32(self, v): 
  """ 
  Generates the crc32 hash of the v. 
  @return: str, the str value for the crc32 of the v 
  """
  return '0x%x' % (binascii.crc32(v) & 0xffffffff) # crc32      %x  16  

公式文書によると、Python 2.xのバージョンではbinascii.crc 32で算出されたCRC値ドメインは[-2^31,2^31-1]の間の符号付き整数であり、一般Cで実作されたCRC結果と比較するために符号なし整数に変換する必要があるため、「&0 xffffff」のセグメントを加えて変換する.python 3の場合.xのバージョンでは、計算結果は[0,2^32-1]間の符号なし整数であるため、修正を追加する必要はありません.
Python 3(問題あり)
binascii法を用いてTypeError:a bytes-like object is required,not'str'
解決策
binascii.crc32("1".encode())

げんり
新しいバージョンのpython 3では、unicodeタイプがキャンセルされました.代わりにunicode文字を使用する文字列タイプ(str)がキャンセルされました.文字列タイプ(str)がベースタイプになります.以下に示しますが、符号化後はバイトタイプ(bytes)になりますが、2つの関数の使用方法は変わりません.
   decode    encode
bytes ——> str(unicode)——>bytes
u = ‘  ‘ #         u
str = u.encode(‘gb2312‘) # gb2312   u    ,  bytes    str
u1 = str.decode(‘gb2312‘)# gb2312      str    ,         u1
u2 = str.decode(‘utf-8‘)#   utf-8    str         ,             

原文Python 2原文Python 3