2017-10-13 8 views
0

以下のXOR暗号を使用してユーザー名とパスワードをテキストファイルに保存するパスワードボールトプログラムがあります。各行は1つのユーザ名とパスワードのペアが含まれ、それらはカンマで区切られているので、この形式は以下:暗号化されたテキストを保存する

ユーザ名、パスワード

ユーザ名、パスワード

などを

問題は、暗号が文字をカンマに暗号化することがあるため、ファイルを再度読み取ろうとするとデータが正しく読み込まれず、本質的に削除されるということです。

私は、XOR暗号からコンマが得られたかどうかをチェックし、そうであれば、次のアスキー文字 " - "にインクリメントしてから、データを読み込むときにコンマに戻し、それを解読する。私がこの解決策で見る問題は、すぐに暗号化された文字との衝突を引き起こす可能性があることです。

誰も私がデータが失われるのを防ぐために使用できるこのソリューションを考えることはできますか?

// XOR cipher 
    public static String encryptDecrypt(String input, String pass) { 
     char[] key = pass.toCharArray(); 
     StringBuilder output = new StringBuilder(); 
     for (int i = 0; i < input.length(); i++) { 
      output.append((char) (input.charAt(i)^key[i % key.length])); 
     } 
     return output.toString(); 
    } 
+1

通常より重度の暗号化を行うコードサンプルです。 'char'はUTF-16であり、Unicodeの問題(サロゲートペア)が発生したときにも、ストア/ロード時のいずれかで、おそらくxoringは機能しません。キーワード:対称キー暗号化の可能性があります。 –

+0

私は強力な別の暗号化アルゴリズムを使用しても、私はまだこの問題に遭遇しません、私はデリミタを持っていますか? – Flaom

+4

まず、あなたの "XOR暗号化"を捨て、実際の暗号化アルゴリズムを使用してください。次に、文字列ではなくバイト配列を操作します。第3に、得られた暗号文のバイナリを、base64エンコーディング(カンマを使用しない)にエンコードします。 –

答えて

0

テキストファイルにテキストを保存するのではなく、ファイルに出力するためにDataOutputStream.writeUTF()を試してください。次に、DataInputStream.readUTF()を使用してファイルから読み込むことができます。このように何かを区切る必要はありません。

関連する問題