sh/ネタ/文字列バイナリ変換

はじめに

チャットやSNSなどで「分かる人には分かるよね」的なメッセージを送りたいときに
難読化することはないですか??(ないですよねきっと)

maji darui
-> 1101101 1100001 1101010 1101001 100000 1100100 1100001 1110010 1110101 1101001

という風に文字列をバイナリ化してみます

文字列 -> バイナリ

xxd -b を使うのが楽です

# シンプルな実装
alias a2b='xxd -b | cut -c11-63 | tr "\n" " "

# バイナリ文字列の先頭のゼロを削り、さらに末尾に改行を付けて出力する例
alias a2b='xxd -b | cut -c11-63 | sed "s/\b00*//g" | tr "\n" " " | sed "s/$/\n/"'

バイナリ -> 文字列

bc でバイナリ->hex変換し、xxdで文字列化すると楽です

alias b2a="tr ' ' '\n' | sed '1iobase=16;ibase=2' | bc | sed 's/^.$/0&/' | tr -d '\n' | xxd -r -ps"

使い方

a2b は「バイナリ文字列の先頭のゼロを削り、さらに末尾に改行を付けて出力する例」を使ってます

$ echo maji darui | a2b
1101101 1100001 1101010 1101001 100000 1100100 1100001 1110010 1110101 1101001 1010

$ echo 1101101 1100001 1101010 1101001 100000 1100100 1100001 1110010 1110101 1101001 1010 | b2a
maji darui

# 記号や制御文字も大丈夫
$ echo -e "ore\tore _>[sagi]<_\nzettai *DAME*" | a2b | b2a
ore     ore _>[sagi]<_
zettai *DAME*

マルチバイト文字列

2バイト単位で処理しているので、ASCIIコード変換機 とは異なる結果になります(互換性はありません)

$ matsuya | tee /dev/stderr | a2b | tee /dev/stderr | b2a
プレミアム牛めしプレート
11100011 10000011 10010111 11100011 10000011 10101100 11100011 10000011 10011111 11100011 10000010 10100010 11100011 10000011 10100000 11100111 10001001 10011011 11100011 10000010 10000001 11100011 10000001 10010111 11100011 10000011 10010111 11100011 10000011 10101100 11100011 10000011 10111100 11100011 10000011 10001000 1010
プレミアム牛めしプレート

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-04-09 (金) 09:19:59