簡単なコード:
encodeURIComponent("\uDDBA")
結果:
URIError: URI malformed
ユーザー入力テキストとパスワードを使用する単純な暗号化を試みています。その後、そのテキストを暗号化してサーバーに保存します。
基本的に、文字「t」をエンコードしようとしています-アルゴリズムは、56762または16進数のDDBAである必要があると判断しました。
しかし、encodeURIComponent を使用してその文字をエンコードしようとすると、特定の 16 進数値がエラーになるようです。
どうすればこれを解決できますか?
私は基本的に、javascript で encodeURIComponent を適切に通過できる文字の利用可能な範囲を知る必要があります。
現在、私は次のようなことをしています:
var xor = 0xDDCE;
var plainText = "t".charCodeAt(0);
var encoded = plainText ^ xor;
var encodedChar = String.fromCharCode(encoded);
var uri = "/someuri?character=" + encodeURIComponent(encodedChar);
// This is how i would get the plain text back
var decoded = encodedChar.charCodeAt(0) ^ xor;
var decodedChar = String.fromCharCode(decoded);
これは非常に単純化されたバージョンで、xor 値は静的です。実際のケースでは、一連の変数に基づいて xor 値が計算されます。
「/someuri」は私が作成したものではなく、もともと暗号化されたデータを受信するために作成されたものではないと仮定します。単にこの URI を使用しようとしているだけです。
また、暗号化アルゴリズムを変更することもできます。xor
値は、ユーザーが入力したパスワードと文字の位置を使用して、かなり単純なアルゴリズムを使用して生成されます。
これを機能させる方法の 1 つは、可能な出力文字の総数を減らし、何らかのマッピングを実行することだと考えていましたが、そのためのコードを実際に想像することはできません。
編集:
私が選択した暗号化のセキュリティに関するコメントは大歓迎です。ただし、実際のデータ セキュリティの側面はそれほど重要ではありません。「平均的な」人が出力された暗号化テキストを読めないようにしたいだけです(たくさんあると仮定してください)