자바에서 AES 암호화 된 바이트를 해독해야합니다. 소스 데이터는 성공적인 해독의 표시로 2 개의 알려진 검증 바이트로 시작합니다. 데이터의 길이는 일부 프로토콜의 이유로 255 바이트보다 작으며, 데이터가 이미 암호화 된 사람이 필요하면 패딩으로 사용 된 것과 동일한 검증 바이트를 사용하여 데이터가 패딩 된 것으로 간주됩니다. 필자는 사용 가능한 접근법으로 수십만 개의 레코드를 성공적으로 해독했습니다.AES 해독의 유효한 결과가 1 바이트와 1 바이트 만 다를 가능성은 얼마나 높습니까?
성공적인 해독 (?) 후 해독 한 결과가 예상 한대로 단 하나의 ONEYYY 바이트 만 다른 레코드가 생겼습니다. 물론 그것은 확인 바이트가 아니라 ;-), 아주 특별한, 문서화 된 의미를 가진 다른 1 바이트. 항상 동일하고 일정한 잘못된 값을 가진 항상 동일한 바이트입니다. 간단히 말해서 0x47
을 얻으십시오. 제조업체 특정 설명서에 따라 0x44
을 가져야합니다.
간단히 말해서, 그 밖의 모든 결과는 내가 가지고 있고 의미있는 문서에 따라 정확합니다. 문제는 지금 내가 정확한 데이터를 가지고 나의 0x47
대신에 0x44
을 얻는다는 주장을하는 데이터의 제조자이다. 내가 AES/CBC/NoPadding
으로 내 응용 프로그램의 디버거에서 Cipher를 사용하는 암호 해독을 위해 우리가 의견 ...
서로 다른 나는 이미 내 결과 데이터에 잘못된 0x47
이 Cipher.final에 대한 호출 후 것을 볼 수 있습니다. 나는 내 방식의 오류를 찾을 수 없기 때문에, 나는 다른 AES의 decrypters을 테스트하기로 결정 발견 나는 동일한 입력 데이터가 동일한 결과를 주장하는 3 가지 구현 :
- http://aes.online-domain-tools.com 를 (!) 이
- http://extranet.cryptomathic.com/aescalc/index
- OpenSSL을 ENC -d -AES-128-CBC -IV "..."-K "..."-p -nopad -in in.bin -out out.bin
다른 AES 해독기가 있지만 대부분 초기화 벡터를 지원하지 않으므로 c를 제공하지 않습니다. 옳은 결과. 그리고 그것은 모든 요점입니다. 입력이 다르면 출력이 달라지며, 테스트 결과에 따라 차이가 커집니다. 몇 바이트 만 변경되거나 결코 변하지 않을 것입니다. 이는 제가보기에는 1 바이트를 제외하고는 항상 완전히 잘못되었거나 완전히 정확합니다.
따라서 올바른 AES가 구현되면 동일한 AES 암호 해독 작업에 대해 동일한 입력을 통해 서로 다른 결과가 생성 될 수 있습니까? 나는 그렇게 생각하지 않는다.
잘못된 입력이 1 바이트를 제외하고 올바른 결과를 생성하는 가능성은 얼마나됩니까? 광산이나 다른 입력 중 하나가 잘못 되었기 때문에 복사해도 아무런 차이가 없습니다.
잘못된 AES 구현이 거의 정확한 결과를 산출 할 가능성이 얼마나 높습니까? 자바는 잘못된 AES 구현을 전혀 제공하지 않을 가능성이 얼마나 높습니까? 나는 그렇게 생각하지 않는다.
더 이상 테스트 할 수있는 정보가 있습니까? 내게는 3 가지 추가 구현이 모두 내 결과를 증명할 수있는 것처럼 보입니다. 그래서 내가하고있는 일이 정확하고 특정 특수 바이트의 차이가 어떤 이유로 든 다른 곳에서 올 필요가 있다고 생각합니다.
감사합니다.
IV에 첫 번째 데이터 블록이 포함되어 있으며 [CBC 모드 암호 해독] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29)을 참조하십시오. 암호화 모드를 지정하지 않으면 CBC 모드라고 가정합니다. 암호화시 단일 바이트가 모든 바이트에 영향을 미치지 만 해독시 IV에서 올바르지 않은 바이트에만 영향을 미칩니다. – zaph