本記事では、ファイルを暗号化する方法と、それを復元する方法について記載しています。
下図は、本プログラム実行前の状態です。ファイルが3つあって、一番左が暗号化に利用する画像ファイル「key.jpg」、中央の「secret_data.csv」が暗号化したいデータファイル、一番右の「zzz_encryption.py」が本プログラムです。

下図は、「zzz_encryption.py」の実行後です。「secret_data.csv」が文字として読めず、暗号化したことがわかります。そして、右隣のファイル「secret_data.csv.bp」はバックアップしたファイルです。

もう一度、「zzz_encryption.py」を実行すると、「secret_data.csv」が復元します。
■本プログラム
import sys
import shutil
import uuid
import re
import datetime
now = datetime.datetime.now()
now = now.strftime("%y%m%d")
def get_MAC_address():
node = uuid.getnode()
mac = uuid.UUID(int=node)
return mac.hex[-12:]
def keygen_Xorshift(key1):
tx, ty, tz, tw = [123456789, 362436069, 521288629, key1]
tt = (tx ^ (tx << 11))
tx, ty, tz = ty, tz, tw
tw = (tw ^ (tw >> 19)) ^ (tt ^ (tt >> 8))
return tw % 256
def main():
shutil.copy2(target_file, backup_file)
if mac_address:
str = mac_address
else:
str = get_MAC_address()
print(str)
pattern = r'[0-9]+'
str_list = re.findall(pattern, str)
key1 = int(''.join(str_list))
print(key1)
key2 = keygen_Xorshift(key1)
with open(target_file, "wb") as f:
target_binary = open(backup_file, "rb").read()
key_binary = open(key_file, "rb").read()
buf = bytearray()
for i, row in enumerate(target_binary):
key3 = key_binary[i % len(key_binary)]
key4 = row ^ key2 ^ key3
buf.append(key4)
f.write(buf)
if __name__ == '__main__':
target_file = 'secret_data.csv'
key_file = 'key.jpg'
backup_file = target_file + '.bp'
mac_address = ''
main()
print('finished')
以上
<広告>
リンク