2015-01-05 3 views
0

암호를 사용할 방법, 방법 등에서 암호화를위한 최선의 방법을 모색했습니다. I'v는 당분간 128Bit AES를 사용하기로 결정했습니다. 내 질문은 다양한 데이터 유형을 암호화하는 데 가장 적합한 방법이 무엇보다 더 중요합니다. 필자의 예에서는지도 데이터와 관련 이미지 데이터가있는 작은 게임을위한 것입니다.AES를 사용하는 Java 암호화 파일 - 최상의 방법

어떤 형식 으로든 데이터를 저장할 수는 있지만 읽지 않는 경우 (암호화되지 않은 경우) 쉽게 읽을 수 있습니다. 실제로 이것을 파일 자체에 저장해야합니까, 아니면 파일 자체를 어떤 방식으로 변경해야합니까?

PNG 또는 BMP 파일로 저장되는 게임과 관련된 이미지 파일과 마찬가지로 나머지 파일 상단에서 암호화하는 방법에 대한 권장 사항은 무엇입니까?

현재 게임 데이터에 대한 방법은 단 한 줄로 암호화하여 한 행씩 파일에서로드하는 것입니다. 각 행은 시스템에 입력 할 다른 데이터 값으로 형식을 지정합니다 (예 :지도의 일부분로드, 일부 항목 데이터 등). 내가 아직 찾지 못했던 이것을 달성하는 더 나은/더 빠른 방법이 있습니까?

실제로 데이터를 저장하고 직렬화 한 다음 전체 클래스를 가져 와서 암호화하는 방법에 대해 궁금합니다. 내가 한 가지로 모든 것을로드 할 수있는 방법은 곧바로 수업에 들어갈 수 있습니다. 이것이 합리적인 아이디어일까요?

+0

* "당분간 128Bit AES를 사용하기로 결정했습니다."* - 어떤 모드를 결정 했습니까? * "현재 게임 데이터에 대한 나의 현재 방법 ..."* - 오, 이런 일은 복잡합니다. 키는 어디에 저장되어 있습니까? – jww

+0

현재 게임 자체에 고정 키가 있습니다. 나는 프로그램을 디 컴파일하고 찾아내는 것이 어렵지 않다는 점을 감안할 때 이것은 상당히 약하다고 생각합니다. 내가 해독하는 데 사용할 수있는 방법에 관한 또 다른 후속 질문입니다. 난 아마 서버 또는 서버에 대해 런타임에 그것을 인증하는 문제가 될거야 가정 열쇠를 보내고. – Sh4d0wsPlyr

답변

1

이미지의 경우 : CipherInputStream/CipherOuputStream을 사용하여 이미지를 읽을 수 있습니다. 이상 이전 Java 버전은 CipherInputStream에 대한 패딩 오류를 무시합니다.

암호의 출력이 2 진이므로 라인을 직접 암호화 할 수 없습니다. 결과를 행으로 저장하려면 (예 : Base64를 사용하여) 인코딩해야합니다. 게임 데이터 같은 것을 텍스트에 넣고 싶으면 스스로 물어보십시오. 암호문 앞에 무작위 IV가 붙은 CBC 모드를 추천합니다.

데이터가 직렬화되면 데이터를 직렬화하는 것이 옵션 일 수 있습니다. 개인적으로 많은 함정 때문에 Java에서 직렬화에 대한 열렬한 팬이 아닙니다. 하지만 예, 직렬화 된 데이터를 확실히 암호화 할 수 있습니다. 결국 바이너리입니다.

+0

예, 암호화를 처음 만드는 동안 발견했습니다. 현재 base64 문자 인코딩으로 저장 중입니다. CipherInputStream에 대한 조언을 해줘서 고맙습니다. 내가 언급 한 CBC 모드에 대해서도 살펴볼 것입니다. 전에는 들어 본 적이 없으므로 파기해야 할 것입니다. 마지막으로 이전에 직렬화에 대해 들어 보지 못했지만이를 조사 할 것입니다. Im는 나가 이미 알고있는 무언가이기 때문에 저것으로보기 위하여 유혹했다. 충고에 감사드립니다. – Sh4d0wsPlyr

+0

Serialization의 함정을 읽는 데 몇 분 밖에 걸리지 않아서, 아마도 옵션으로 사용하지 않을 것입니다. 직렬화하려는 클래스는 작지만 개별적으로 많은 데이터를 구성합니다. 게다가 대부분의 수업은 기능과 설정 모두에서 바뀔 것입니다. 따라서 데이터를 암호화하면 더 좋을 것입니다. 나는 당분간 간단한 해결책으로 데이터를 계획대로 암호화하고 나중에 키로 문제를 해결할 것이라고 생각한다. – Sh4d0wsPlyr

관련 문제