7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Node.js] ファイルの内容をビット反転させる

Last updated at Posted at 2014-10-22

ファイルの内容を単純にビット反転させるプログラムを作った。

暗号化とも言えない、すごく単純なものだ。

最近 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 として登録してみた。

おしまい。

7
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?