나는 자바로 간단한 AES 암호화를하고있는 중이 야 :C 프로그램이 해독 된 텍스트에 패딩없이 해독 할 수 있도록 Java에서 문자열을 암호화 하시겠습니까?
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, getAES128SecretKey());
byte[] encrypted = cipher.doFinal(input);
출력 16 진수로 변환하고 데이터베이스에 저장됩니다.
이후 프로세스 (C/C++로 작성된 프로세스)가 따라 와서 16 진수를 읽고이를 바이트로 변환하고 해독합니다.
분명히 C 구현은 텍스트를 올바르게 해독하지만 불필요한 끝에 추가 바이트를 유지합니다.
예를 들어(진짜 값) :
Java: encrypt("eric") -> 1234567890FFFFFF1234567890FFFFFF (hex)
Java: decrypt("1234567890FFFFFF1234567890FFFFFF") -> "eric"
C: decrypt("1234567890FFFFFF1234567890FFFFFF") -> "eric XXXX XXXX XXXX"
나는 C의 암호 해독 알고리즘과 그것이 내가 자바에 널 (NULL) 종료 문자 '\0'
를 추가 제안 암호화하기 전에 바이트있다 이용하여 파티를 보유하고 있지 않습니다. 내 질문은, 그게 효과가 있고 그 생각을 즐겁게해야한다는 것인가?
Padding error when using AES encryption in Java and decryption in c 질문에 대한 첫 번째 대답 ("받아 들일 수없는", 나에게 맞는 것 같습니다)을 읽으면 패딩 크기를 명시 적으로 인코딩하는 것이 올바른 방법입니다.
그러나 문자열이 C로 암호화되고 C에서 해독되면 어떻게 될까요? 이제 C로 암호화 된 문자열에 C에서 해독 할 때 문제가 발생하고 Java 암호화 된 문자열 인 것처럼 채우기가 제거됩니까? 아니면 이것은 문제가 아닌가?
자바와 C는 같은 질문입니다. 할리와 세발 자전거를 비교하는 것과 같습니다 ... 자바는 세발 자전거입니다. –
@Matt - Java는 적어도 그곳에서 한 사람만큼 멋진 곳입니다. 면도기 스쿠터에 모든 엉덩이 아이들이 지금 타고 있습니다 ...;) – Eric