일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Jupyter
- Jupyter Notebook
- PYTHON
- insert
- nGrinder
- nohup
- STF
- kitura
- sshpass
- rethinkdb
- mysql
- create table
- perfect
- appium server
- ftp
- SWIFT
- GoCD
- Materials
- 28015
- centos
- postgresql
- appium
- nmap
- postgres
- port forwarding
- 실행권한
- ssh
- ubuntu
- openpyxl
- STF_PortForwarding
- Today
- Total
don't stop believing
blockchain 테스트에 사용한 python 함수 - leftPad64 본문
blockchain 테스트에 사용한 python 함수를 설명합니다.
- getDateStrings - 날짜 - 년, 월, 일, 시, 분, 초를 확인하는 함수입니다.
- getLogfileNameWithPath - 로그 기록을 위해 폴더를 생성하고 경로를 반환합니다.
- getRequestId - ramdom으로 숫자를 반환합니다.
- moveFile - 특정 파일을 로그 폴더로 이동시킵니다.
- saveResultData - 데이터를 파일에 저장합니다.
- convertToHex - String을 hex로 변환합니다.
- leftPad64 - 왼쪽에 (또는 오른쪽에) 0을 채워 고정된 길이로 만듭니다.
- getTestConfig - json 형태의 config 파일을 만들고 불러옵니다.
- waitingCount - time.sleep() 할 때 동적으로 카운트를 셉니다.
- callRPC - requests 모듈을 사용해 http API를 호출합니다.
- callWS - websocket 모듈을 사용해 API 통신을 합니다.
Blockchain에서는 SHA-2 (Secure Hash Algorithm 2)를 사용합니다.
보통 sha256를 사용하며 암호화 하여 변환하게 되면 고정된 길이(64)의 데이터가 나오게 됩니다.
python3 에서 sha256을 확인해 본다면 아래와 같습니다.
import hashlib m = hashlib.sha256() m.update(b'nGle') m.hexdigest() # '0a70521ebae01cdf404485c2ef7f958a2a90d42655799ba9c444804d4b9755df'
간혹 hex 데이터를 sha256 데이터의 형태로 변환해야 할 때가 있습니다.
이럴때는 hex 데이터의 왼쪽이나 오른쪽에 0을 추가해 길이가 64인 데이터를 만들어 줘야 합니다.
# coding=utf-8 class nGleUtils(): def leftPad64(self, hexData, prefix=False): '''왼쪽에 0을 체워 64자의 hex 데이터를 만듭니다.''' # hex 데이터의 0x를 제거합니다. if hexData[:2] == "0x": hexData = hexData[2:] # prefix가 True일 경우 0x를 추가해줍니다. if prefix: return "0x" + "{:0>64}".format(hexData) else: return "{:0>64}".format(hexData) def rightPad64(self, hexData, prefix=False): '''오른쪽에 0을 체워 64자의 hex 데이터를 만듭니다.''' # hex 데이터의 0x를 제거합니다. if hexData[:2] == "0x": hexData = hexData[2:] # prefix가 True일 경우 0x를 추가해줍니다. if prefix: return "0x" + "{:0<64}".format(hexData) else: return "{:0<64}".format(hexData) if __name__== "__main__": ngle = nGleUtils() hexData = "0x4869206e476c6521" # hexData의 왼쪽에 0을 체워 길이를 64로 맞춥니다. # prefix=True를 input에 추가해 hex 데이터로 만들어 줍니다. leftPad = ngle.leftPad64(hexData, prefix=True) print(leftPad) # hexData의 오른쪽을 0으로 채줘 길이를 64로 만들어 줍니다. rightPad = ngle.rightPad64(hexData) print(rightPad)
왼쪽을 채워야 할 경우 leftPad64(), 오른쪽을 채울 경우엔 rightPad64()를 사용합니다.
실행하면 아래와 같습니다.
$ python leftPad64.py 0x0000000000000000000000000000000000000000000000004869206e476c6521 4869206e476c6521000000000000000000000000000000000000000000000000
hex 데이터 형식이 필요할 경우 prefix=True를 input으로 추가해 결과 데이터에 "0x"를 붙여 줍니다.
'Python > Basic' 카테고리의 다른 글
blockchain 테스트에 사용한 python 함수 - waitingCount (0) | 2018.12.18 |
---|---|
blockchain 테스트에 사용한 python 함수 - getTestConfig (0) | 2018.12.18 |
blockchain 테스트에 사용한 python 함수 - convertToHex (0) | 2018.12.17 |
blockchain 테스트에 사용한 python 함수 - saveResultData (0) | 2018.12.17 |
blockchain 테스트에 사용한 python 함수 - moveFile (0) | 2018.12.17 |