文字列を隠すための最適な方法は何ですか
学習の目的で、Java シリアライゼーションをもう少し掘り下げることにしました。ほとんどは問題ありません。ただし、文字列値に単純な隠蔽を適用しようとすると、この奇妙な問題に遭遇しました。
状況の内訳:プロファイル作成フレームから渡される特定のデータを暗号化せず に「あいまい」にしたいと考えています。プロファイルのユーザー名、パスワード、名前、姓などのすべてのプロファイルの詳細に単純なノイズを追加します。
望ましい結果はシンプルで、時には機能し、時には単に特定の文字を見逃すこともあります. 例:
プロファイル名: "John" は " ~nh#j@o^ " に変換され、もちろん"John" に戻ります。
問題は、あいまいな部分に現れます。すべてが問題ないかどうかを確認するために結果を出力しています。「John」の代わりに、特定の文字 (1-2) が失われ、次のように文字が追加されます。
プロフィール名: "John" は " ~n#j@o^ " に変換され、"Jon" に戻ります。
これは奇妙な問題です。私は記事を見回して、曖昧なスタイルを一種の「模倣」して、あまり触れないようにしました.
プロファイル名が隠されている例を次に示します。
String nFirstCut = p.getName().substring(0, nSplit); //The first 'slice'
String nSecondCut = p.getName().substring(nSplit+1, nSplit*2); //The second 'slice'
String nThirdCut = p.getName().substring(nSplit*2+1); //The third 'slice'
/*
* New Obscured name is now - second 'slice' + randomCharacter + first 'slice'
* + randomCharacter + third 'slice'
*/
String nObcName = nSecondCut + obcChars[q] + nFirstCut
+ obcChars[r] + nThirdCut + obcChars[s];
p.setName(nObcName);
注: nSplit は単純に getName() の長さを 3 で割ったものです (3 つの「スライス」を生成するため)。
また、追加したかった。これは、JTextField#getText() とは対照的に、JPasswordField#getPassword() からパスワードを隠蔽しようとすると、さらに悪化します。理由も不明