2012-03-21 3 views
1

AES 암호화에 문제가있어서 고객이 "암호 해독"을 위해 PHP 서버 코드를 보여주었습니다. 흥미롭게도 정확한 코드는 S.O.에서 가져 왔습니다. (당연하지). 나는 고객이 나에게 전달한 코드가 똑같은 코멘트를 가졌기 때문에 이것을 발견했다! :)어떻게이 PHP 라인을 Java로 포팅 할 수 있습니까?

어쨌든, this S.O.에서 가져온 PHP 코드입니다. 문제.

나는 자바와 동일한 작업을 수행하려고하지만이 정확한 라인이 추가되어 모르는 :

$key = 'a16byteslongkey!'; 

$padded_key = $key . str_repeat(chr(0x00), 16); // Argh! 

(! 상기 // 아아 주석 광산이 아니었다주의)

32 비트 키를 만들기 위해 chr (0x00)을 추가하려고합니까 ($ 키가 16이기 때문에?) 그렇다면 자바에서 어떻게 동일한 작업을 수행 할 수 있습니까?

+0

@ 조쉬 아마 내가 분명히해야한다 : PHP에서 chr (0x00) 무엇입니까? –

+0

PHP에서 문자열은 바이너리 안전합니다 (문자열의 모든 "문자"는 실제로는 바이트입니다).하지만 Java의 문자열 인스턴스는 실제로는 바이트가 아니라 문자를 나타냅니다. 바이너리 암호화 키의 경우'String' 객체를 사용해서는 안되며'byte []'또는'Key' 클래스와 같은 것을 사용해야합니다. –

+0

@AnotherCode 실제로 해명 해 주셔서 감사합니다. 서버 측에서 고객이 "해킹"을하고 16 개의 0으로 16 개의 키를 완성 했으므로 32 개를 추가했습니다 ... 고정 키에 16 개의 "0"이 채워진 후 모두 작동했습니다. ;) –

답변

2

:

public static String strRepeat(String toRepeat, int reps){ 
    //Sanity checks go here! 
    StringBuilder sb = new StringBuilder(); 
    for(int x = 0; x < reps; x++){ 
     sb.append(toRepeat); 
    } 
    return sb.toString(); 
} 

이제 라인으로 대체 할 수 있습니다

String paddedKey = key + strRepeat('\0', 16); // Argh! 
+0

+1 의견 존중;) –

1

chr(0x00)은 ASCII 코드 0으로 문자를 반환해야합니다.이 문자는 Java에서 '\0'으로 나타낼 수 있다고 생각합니다. 가레스이 우리가 문자열을 반복하는 기능을 할 수있는이 사용하는 ASCII 코드 0과 문자를 반환 언급 한 바와 같이

+0

Gareth에게 감사드립니다. –

관련 문제