을 학술 목적으로 사용하기 위해 java 및 java 암호를 사용하는 작은 암호화 기반 응용 프로그램을 개발 중입니다. 즉, 나는 일반적으로 C 또는 C++ (매우 쉬운 일이 일어난다)에서 일하기 때문에 이것은 명백한 문제라면 사과드립니다. 따라서 정보를 해독하려고 할 때 내 문제가 발생합니다. 이 문제는 암호화 나 다른 것을 사용하는 것과 관련이 없지만 실제로는 초기화 벡터를 적절히 검색합니다.BufferedReader.readLine()은 이진 코드
password:salt:<IV>
- 지금 나는 (분명히 키 파일이 현실 세계에서 일반 텍스트로되지 않을 것 예,이 불안하지만 그것은 학문적 인 운동이다)으로 구분 된 다음과 같은 형식의 새로운 온라인/대장과 일반 텍스트 파일이 여기서 <IV>
은 초기화 벡터입니다. 초기화 벡터를 직접 바이너리 형식으로 작성하기로했습니다. 이제 여기서 나는 나의 문제가 시작되는 곳이다. 데이터를 올바르게 쓸 수는 있지만 (hexdump를 사용하여 검증 된 것입니다.) 프로그램으로 올바르게 읽혀지지 않는 것 같습니다. 예를 들어 카운터 값이
00 18 C0 98 (decimal: 1622168)
이 값은 올바르게 기록됩니다. 그러나 읽을 때이 값은 모두 잘못되었습니다. 나는 이것이 BufferedReader.readLine()
의 결과라고 생각합니다. 간단히 말해서 나는 당신이 줄을 읽고 다른 파일에 쓰는이 값은
BD EF BF BD (decimal: who cares, very wrong...)
로 변경 그러나 ASCII 값 (비밀번호, 소금)을 그대로뿐만 아니라 대장 구분 남아있다. 초기화 벡터 바이너리는 모두 스크램블된다.
는 내가 뭘하려고 오전 이것이다 :이 시점에서
BufferedReader reader = new BufferedReader(new FileReader(f));
String last = null;
String parse = null;
while((last = reader.readLine()) != null) {
parse = last;
}
reader.close();
int offset = // A few indexOf() statements to find the positon;
byte[] iv = parse.substring(offset).getBytes();
, 이미 잘못 (128 비트 AES를 사용하여) iv.length > 16
. 그래서 나는이 ASCII- 바이너리 믹스를 어떻게 완성 할 수 있는지 완전히 확신하지 못한다. 내 문제의 일부는 Java에서 char != byte
이며 전체 라인을 읽으려는 경우 모든 내용을 읽을 수 없다 (어쨌든 readLine()
사용). 그러나이 문제를 해결하기 위해 어쨌든 있습니까? 전체 라인을 원하기 때문에이 라인에서 바이너리를 추출하려고합니다.
또한, 나 또한 직접 변환
for(int i = 0 ; i < 16 ; ++i)
iv[i] = (byte)parse.charAt(offset + i);
을 시도하지만이 중 하나가 작동하지 않습니다. 다른 코드 (getBytes()
기반)는 java version "1.6.0_37"
으로 개인용 컴퓨터에서 작동하지만 배포 환경에서는 java version "1.6.0_33"
을 사용하고 있습니다. 어떤 도움을 주셔서 감사합니다.
이진 데이터에 독자를 사용하지 마십시오. – EJP