表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
1/9

1つ以上のファイルの全ビット反転

 複数のファイルといった、1つ以上のファイルの全ビットを反転させます。


 例えば、センシティブな画像や動画をクラウドにアップロードすると、グーグルのクラウドの場合はファイルを削除されたりアカウントを削除されたりするそうです。


 パソコンで画像や動画を全ビット反転させてからアンドロイド スマホやタブレットにコピーすれば、画像や動画がアンドロイド システムに勝手にクラウドに保存されるのを予防できます。


 ただし、原因は不明ですが動画には全ビット反転すると元に戻してもブラウザがエラーを発生させてしまう物が有りますし、サイズが大き過ぎる動画はブラウザーがメモリー不足エラーを発生させてしまいます。


 後は、USBメモリーで保存したい他人に見られたくない小説などのデータをすぐには見られないようにできます。


 ただし、全ビット反転は暗号化ではありません。


 さらに、AIなどの最近のデータ解析の進歩で全ビット反転はすぐに見破られるかもしれません。


 しかし、「『全ビット反転されているファイルである』と知られなければデータを視聴されないのでは」と思いました。


 そして、「『全ビット反転しているだけである』と知っていれば、プログラムの知識や技術が有れば、最悪の場合でも、検索して全ビット反転し直すプログラムを自作できる」と考えました。


 全ビット反転してもファイルのサイズは変わりません。


 全ビット反転を悪用しないでください。


 全ビット反転した画像や動画をクラウドにアップロードして、クラウドの運営に全ビット反転を見破られて画像や動画を検閲されてアカウントを削除されても自己責任です。


 不具合が有るかもしれないので利用は自己責任でお願いいたします。


 コピーする場合は、2文字の全角空白を4文字の半角空白に置換してください。


 UTF-8という文字コードで、Pythonの.pyファイルを保存してください。


 tkinterはPythonに標準で含まれているはずですが、Linux Mintに無い場合は、ソフトウェアマネージャでPython3-tkをインストールする必要が有ります。

import tkinter

from tkinter import messagebox

from tkinter import filedialog

import os

import re


root = tkinter.Tk()

root.geometry("800x300")

root.title("ビット反転")


in_file_paths = ()


in_file_string_var = tkinter.StringVar()

in_file_string_var.set("")


in_file_label = tkinter.Label(root, textvariable=in_file_string_var)

in_file_label.place(x=10, y=40)


# 入力ファイル選択ボタンが押された時の処理

def select_in_file():

  try:

    global in_file_paths

    in_file_paths = filedialog.askopenfilename(initialdir=os.path.expanduser("~"), multiple=True, filetypes=[("全ての種類のファイル", "*")])

    in_file_string_var.set(" ".join(in_file_paths))

  except Exception as exception:

    messagebox.showerror(exception.__class__.__name__, str(exception))

    raise


in_file_select_button = tkinter.Button(root, text="入力ファイル選択", command=select_in_file)

in_file_select_button.place(x=10, y=10)


out_dir_string_var = tkinter.StringVar()

out_dir_string_var.set("")


out_dir_label = tkinter.Label(root, textvariable=out_dir_string_var)

out_dir_label.place(x=10, y=110)


# 出力ディレクトリ選択ボタンが押された時の処理

def select_out_dir():

  try:

    out_dir_string_var.set(filedialog.askdirectory(initialdir=os.path.expanduser("~")))

  except Exception as exception:

    messagebox.showerror(exception.__class__.__name__, str(exception))

    raise


out_dir_select_button = tkinter.Button(root, text="出力ディレクトリ選択", command=select_out_dir)

out_dir_select_button.place(x=10, y=80)


message_string_var = tkinter.StringVar()

message_string_var.set("")


message_label = tkinter.Label(root, textvariable=message_string_var)

message_label.place(x=10, y=180)


# ビット反転ボタンが押された時の処理

def flip_bit():

  try:


    out_dir = out_dir_string_var.get()


    if len(in_file_paths) == 0:

      message_string_var.set("入力ファイルを1つ以上、選択してください。")

      return


    if out_dir == "":

      message_string_var.set("出力ディレクトリを選択してください。")

      return


    message_string_var.set("ビット反転中です……。")


    out_file_paths = []


    for in_file_path in in_file_paths:


      in_file_name = os.path.basename(in_file_path)


      out_file_name = ""

      if re.match("^.+\\.[bB][iI][nN]$", in_file_name):

        out_file_name = re.sub("\\.[bB][iI][nN]$", "", in_file_name)

      else:

        out_file_name = in_file_name + ".bin"


      with open(os.path.join(out_dir, out_file_name), "wb") as file:

        with open(in_file_path, "rb") as f:


          while True:

            bytes = f.read(1024)

            read_byte_size = len(bytes)

            if read_byte_size == 0:

              break


            # ビットを反転

            integer = ~ int.from_bytes(bytes, byteorder="little", signed=True)


            file.write(integer.to_bytes(read_byte_size, byteorder="little", signed=True))


      out_file_paths.append(os.path.join(out_dir, out_file_name))



    message_string_var.set("ビット反転が完了しました。" + " ".join(out_file_paths))


  except Exception as exception:

    messagebox.showerror(exception.__class__.__name__, str(exception))

    raise


flip_bit_button = tkinter.Button(root, text="ビットを反転", command=flip_bit)

flip_bit_button.place(x=10, y=150)


root.mainloop()

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ