Ховаємо текст від сторонніх очей (приклад на Scala)

Після прочитання цього поста, у мене виникла ідея, а чи не можна зробити якийсь текст повністю невидимим? Нижче описаний метод не претендує на ефективність по швидкості роботи або обсягом даних.

Коротенько
Кожен байт рядка ми перетворюємо в тризначне вісімкове число і замінюємо кожну цифру на один з невидимих символів.

Імплементація на Scala
» Посилання на GitHub

object Main extends App {
val v = Array("\u2060", "\u200B", "\u2061", "\u2062", "\u2063", "\uFEFF", "\u200C", "\u200D")

def str2oct(buf: Array[Byte]): String = buf.map("%03o" format _).mkString
def oct2str(string): String): String = new String(string.sliding(3,3).toArray.map(x => BigInt(x,8).toByte))

def voidEnc(char: String):String = v(char.toInt)
def voidDec(char:String):String = v.indexOf(char).toString

def char2void(string): String): String = str2oct(string.getBytes()).map(x=>voidEnc(x.toString)).mkString
def void2char(string): String):String = oct2str(string.map(x=>voidDec(x.toString)).mkString)

val void = char2void("Hello! Привіт!")
println(void)
val text = void2char(void)
println(text)
}

Розберемо по частинах цей код.

val v — це масив, що містить більшість (за винятком U+180E) невидимих Unicode-символів.

def str2oct — функція, що перетворює масив байт (наприклад, «hello».getBytes()) вісімкове його відображення, наприклад, 150 145 154 154 157 (прогалини вставлені для наочності).

def oct2str — функція, що виконує зворотне перетворення. Розбиваємо рядок на шматки по 3 символи, перетворюємо триплети у відповідний символ і збираємо рядок назад.

def voidEnc — заміщає вісімкове число (наприклад, 7) на відповідний символ з нашого масиву невидимих символів.

def voidDec — повертає число, відповідне невидимому символу.

def char2void — спочатку ми перетворюємо рядок у вісімкових триплети (str2oct), а потім кожне число замінюємо на невидимий символ (voidEnc)

def void2char — спочатку розшифровуємо вісімкові триплети, а потім перетворюємо їх в рядок.

p.s. Не рекомендую публікувати «Війну і мир» або будь-які інші довгі зашифровані повідомлення в коментарях, тому що це може зламати браузер у багатьох користувачів.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.