ファイルの内容を単純にビット反転させるプログラムを作った。
暗号化とも言えない、すごく単純なものだ。
最近 Gmail で .js などを含む .zip ファイルを添付して送れなくなった。
xxx.zip を xxx.zip_ などで以前は送れていたのだが、今はダメだ。
しかたがないので、パッと見で zip ファイルだとわからない様にしてみた。
以下の様に使用する。
$ node reverse-file.js ファイル名
または
$ node reverse-file.js ファイル名 ff
ファイル名.rev にビット反転されたファイルができる。
ファイル名の次の引数は 01~ff までの16進数だ。排他的論理和の素だ。
reverse-file.js
#!/usr/env/bin node
// reverse-file.js / reverse-file.sh -- ファイル反転
'use strict';
var fs = require('fs');
// command arguments
var file = process.argv[2];
if (!file) return console.log('ファイル名を指定してください。\n' +
'Usage: %s %s {file-name}', process.argv[0], process.argv[1]);
var xff = parseInt(process.argv[3], 16) & 0xff || 0xff;
// console.log(xff.toString(16));
// open
var r = fs.createReadStream(file);
var w; // for write stream
r.on('readable', function () {
var buf = r.read();
if (!buf || !buf.length) return; // empty
// bit reverse
for (var i = 0, n = buf.length; i < n; ++i) {
buf[i] ^= xff;
}
if (!w) w = createWriteStream(file + '.rev');
w.write(buf);
});
r.on('end', function () {
if (w) w.end();
});
r.on('error', function (err) {
console.log('read: ' + err);
if (w) w.end();
});
function createWriteStream(file) {
var ww = fs.createWriteStream(file);
ww.on('error', function (err) {
console.log('write: ' + err);
});
return ww;
}
npmjs にも reverse-file として登録してみた。
おしまい。