pr索好きな目からテキストを隠す(Scalaの例)

この投稿を読んだ 、私は考えましたが、特定のテキストを完全に非表示にすることは可能ですか? 以下に説明する方法は、速度またはデータ量の点で効果的であると主張していません。



簡単に



文字列の各バイトを3桁の8進数に変換し、各数字を不可視文字の1つに置き換えます。



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() )を8進表示、たとえば150 145 154 154 157 (わかりやすくするためにスペースを挿入)に変換する関数。



def oct2strは、逆変換を実行する関数です。 文字列を3文字に分割し、トリプレットを対応する文字に変換して、文字列を収集します。



def voidEnc -8進数(たとえば7)を不可視文字の配列からの対応する文字に置き換えます。



def voidDec-不可視文字に対応する数値を返します。



def char2void-最初に文字列を8進数のトリプレット( str2oct )に変換してから、各数値を不可視文字( voidEnc )に置き換えます



def void2char-最初に、8進数のトリプレットを復号化し、次にそれらを文字列に変換します。



PS多くのユーザーにとってブラウザが壊れる可能性があるため、コメントに戦争と平和やその他の長い暗号化されたメッセージを公開することはお勧めしません。



All Articles