2017-10-13 2 views
0

아래의 XOR 암호를 사용하여 사용자 이름과 암호를 텍스트 파일에 저장하는 암호 저장 프로그램이 있습니다. 각 라인은 하나의 사용자 이름과 암호 쌍을 포함하고는 쉼표로 구분됩니다, 그래서이 형식 다음과 같습니다암호화 된 텍스트 저장

사용자 이름, 암호

사용자 이름, 암호

등을

문제는 암호가 쉼표로 문자를 암호화하기 때문에 파일을 다시 읽으려고 할 때 데이터가 부적절하게 읽히고 본질적으로 삭제된다는 것입니다.

쉼표가 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이고 유니 코드 문제 (서로 게이트 쌍)를 야기 할 때나 저장/로딩 중 xoring이 작동하지 않을 것입니다. 키워드 : 대칭 키 암호화. –

+0

강해지는 다른 암호화 알고리즘을 사용하더라도 구분 기호로이 문제가 계속 발생하지 않습니까? – Flaom

+4

먼저 "XOR 암호화"를 도용하고 실제 암호화 알고리즘을 사용하십시오. 둘째, 문자열이 아닌 바이트 배열에서 작동합니다. 셋째, 생성 된 암호문 바이너리를 base64 인코딩으로 인코딩합니다 (쉼표는 사용하지 않음). –

답변

0

해보십시오 DataOutputStream.writeUTF() 대신 텍스트 파일에 저장하는 파일의 텍스트입니다. 그런 다음 DataInputStream.readUTF()를 사용하여 파일에서 읽을 수 있습니다. 이 방법으로 아무 것도 구분하지 않아도됩니다.

관련 문제