pythonプロジェクトのまとめ
6189 ワード
最近pythonのツールを書いて、まとめてみます. の処理を容易にするために変数タイプを印刷することができる. とも呼ばれる. pythonオブジェクトのすべての属性値を印刷する方法. である. pythonオブジェクト情報 を取得する pdbデバッグ[pythonデバッグ方法](pythonデバッグ方法)https://www.cnblogs.com/skyus/p/7210234.html) protocol Buffers Now that you have a loggingログ・レベル、ネット上の例は が多い python structモジュールバイト順の問題を解決し、バイト位置合わせ、 を浅く分析する「openssl」という比較的複雑な AES 128対称暗号化AES暗号化アルゴリズムの詳細と実装 subprocessモジュール import argparseモジュール 埋め込み文字列 (注意):ここでの
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
type( )
#は、len(var)
#取得可能タイプ長binascii.a2b_hex(string)
#16進数文字列をバイナリデータに変換します.この関数はunhexlify(string)binascii.b2a_hex(string)
python文字列と16進数相互回転def prn_obj(obj):
print '
'.join(['%s:%s' % item for item in obj.__dict__.items()])
以上は、あるオブジェクトの全ての属性値を印刷する方法plain_text.rstrip('\0')
#削除文字列末尾0文字.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モジュール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モジュール 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 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
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