2013-09-22 6 views
0

안녕하세요 저는 AES 프로그램을 사용 중이며 암호화 된 형식의 출력은 bytearray입니다. 육각 배열이16 진수 bytearray

e3 7c 1a 51 32 a9 a1 21 d4 fb b9 8b 0a 42 a6 84 

지난 시즌에 4 일 0A입니다 있어야하는데 단 하나의 문자열에서 나는

e37c1a5132a9a121d4fbb98ba42a684 

을 부여하고 있지만, 연결된 문자열에서처럼 일반을 보이고있다. 어떻게 감지 할 수 있습니까?

아래의 첨부 된 링크에서 바이트 배열에 처음 생성 된 링크에서 나가려고하지만 0a에 0이없는 경우 문자열 충돌이 발생합니다.

http://laurentcharignon.com/blog/?p=37

+1

어떻게 문자열을 만들고 있습니까 (0 (? –

+0

저는 전문가는 아니지만 CRC 체크로 다른 바이트를 보내고 오류를 삭제할 수 있습니까? – zenpoy

+0

어떤 이유에서인지, 나는이 줄을 실행했을 때 실행하지 않았을 것이라고 추측한다. 그러나 암호화 하에서이 줄은 그것을 보호한다 : if ((data [i] & 0xFF) <16) str = str + "0"+ java.lang .Integer.toHexString (data [i] &0xFF); –

답변

2

문제는, 루프에서 hex() 함수 결과 값 미만이 16 대한 '0x' 프리픽스 후 앞에 0을 포함하지 않는다는 것이다 그래서 hex(10)'0xa'hex(10)[2:]'a'이다 (str() 호출은 불필요하다). 그래서 대신 :

result = ''.join('%02x' % ord(char) for char in ciph) 
: 발전기 식으로 될 것 같은 일을

result = "" 
for char in ciph: 
    result += '%02x' % ord(char) 

약간 더 간결 방법 :

result = "" 
for char in ciph: 
    result += str((hex(ord(char))))[2:] 

이 같은 뭔가 hex()를 사용하여 피할 수

결과를 좀더 읽기 쉽게하기 위해 각 2 바이트 16 진수 값과 다음과 약간 다른 표현식 사이에 공백을 추가 할 수 있습니다.

 ' '.join('%02x' % ord(char) for char in ciph) 
2

누락 된 정보의이 종류는 복구 할 수 없습니다. 이 깨진 문자열을 생성하는 장소를 수정해야합니다. 위의 문자열을 생성하는 또 다른 유효한 소스 문자열은 다음과 같습니다.

e3 7c 1a 51 32 a9 a1 21 d4 fb b9 8b a4 02 a6 84 

여기서 0은 한 자리 뒤에 삽입됩니다. 기술 수준에서는 위의 16 진수 표현에 0을 사용하여 생성하는 데 사용 된 원본 문자열을 유추 할 수 없습니다.