ファイルの全ビットを反転するJavaScript(とHTML)のコード
ファイルの全ビットを反転させます。
例えば、センシティブな画像や動画をクラウドにアップロードすると、グーグルのクラウドの場合はファイルを削除されたりアカウントを削除されたりするそうです。
パソコンで画像や動画を全ビット反転させてからアンドロイド スマホやタブレットにコピーすれば、画像や動画がアンドロイド システムに勝手にクラウドに保存されるのを予防できます。
ただし、原因は不明ですが動画には全ビット反転すると元に戻してもブラウザがエラーを発生させてしまう物が有りますし、サイズが大き過ぎる動画はブラウザーがメモリー不足エラーを発生させてしまいます。
後は、USBメモリーで保存したい他人に見られたくない小説などのデータをすぐには見られないようにできます。
ただし、全ビット反転は暗号化ではありません。
さらに、AIなどの最近のデータ解析の進歩で全ビット反転はすぐに見破られるかもしれません。
しかし、「『全ビット反転されているファイルである』と知られなければデータを視聴されないのでは」と思いました。
そして、「『全ビット反転しているだけである』と知っていれば、プログラムの知識や技術が有れば、最悪の場合でも、検索して全ビット反転し直すプログラムを自作できる」と考えました。
全ビット反転してもファイルのサイズは変わりません。
全ビット反転を悪用しないでください。
全ビット反転した画像や動画をクラウドにアップロードして、クラウドの運営に全ビット反転を見破られて画像や動画を検閲されてアカウントを削除されても自己責任です。
不具合が有るかもしれないので利用は自己責任でお願いいたします。
コピーする場合は、2文字の全角空白を4文字の半角空白に置換してください。
.htmlファイルでUTF-8という文字コードで保存してください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>ビット反転</title>
</head>
<body>
<div>
ファイル選択 <input type="file" id="file" />
</div>
<br />
<div>
<button type="button" id="flipBit">ビット反転</button>
</div>
<br />
<br />
<p id="message"></p>
<script>
function $(id) {
return document.getElementById(id);
}
function readAsArrayBufferSync(file) {
return new Promise(function (resolve, reject) {
var fileReader = new FileReader();
fileReader.onload = function () { resolve(fileReader.result); };
fileReader.onerror = function () { reject(fileReader.error); };
fileReader.readAsArrayBuffer(file);
});
}
$("flipBit").onclick = async function () {
var files = $("file").files;
if (files.length == 0) {
$("message").innerHTML = "ビット反転するファイルを選択してください。";
return;
}
$("message").innerHTML = "ビット反転中です……。";
var file = files[0];
var outFileName = file.name;
if (outFileName.match(/^.+\.bin$/gi) != null) {
outFileName = outFileName.replace(/\.bin$/gi, "");
} else {
outFileName = outFileName + ".bin";
}
var arrayBuffer = await readAsArrayBufferSync(file);
var size = arrayBuffer.byteLength;
var dataView = new DataView(arrayBuffer);
for (var byteIndex = 0; byteIndex < size; byteIndex++) {
dataView.setUint8(byteIndex, (~ dataView.getUint8(byteIndex)) >>> 0, /* リトル エンディアン */ true);
}
var blob = new Blob([new Uint8Array(arrayBuffer)], {type: "application/octet-stream"});
var url = URL.createObjectURL(blob);
var aTagElement = document.createElement("a");
aTagElement.href = url;
aTagElement.download = outFileName;
aTagElement.click();
URL.revokeObjectURL(url);
$("message").innerHTML = "ビット反転を完了しました。";
};
</script>
</body>
</html>