2017-11-16 30 views
1

저는 CBC 모드로 암호화하여 단순한 시저 암호화를 개선하려고 노력해 왔습니다.Caesar in CBC/Java에서 XOR하는 방법?

제가 알고 있듯이 첫 번째 문자는 초기화 벡터에 의해 XOR되고 키에 의해 다음 출력은 암호화 된 텍스트의 첫 번째 문자입니다. 그러면 두 번째 문자가 XOR되고 다시 키와 XOR됩니다 ... 등등.

XORing이 어떻게 작동하는지 잘 모르겠습니다. /s의 : 0, A : 1, B :

우리가 제공하는 변환 표 (전용 공간과 AZ)하자 2, ..., Z : 26 키 : 1, Init.vector : 5

>} {8,5,12,12,20 - -> {9,6,13,13,21} -> 'IFMMP'

간단한 시저 'HELLO' '를 사용

하지만 CBC를 사용하여 암호화하려면 어떻게해야합니까?

Java로 구현하는 방법을 보여 주시면 특히 유용 할 것입니다. 감사! 당신은 당신의 암호로 키에 xor 할 생각처럼

답변

1

흠 내가 질문을 해석이 잘못된 것입니다 : 암호에서 이전 결과에 의해

당신의 XOR은. 이런 식으로 뭔가 :

// Untested code 
// The code below need to be adjusted for it to print meaningful 
// characters in the encrypted string as the xor function produces 
// integers outside the range of standard ascii characters 

private void cbcCaesar(){ 

    int key = 1; 
    String message = "java"; 
    int initialisationVector = 5; // the IV is not super necessarily hidden from an attacker but should be different for each message 

    StringBuilder encryptedMessageBuilder = new StringBuilder(); 

    char[] charArray = message.toCharArray(); 

    int encryptedLetter = initialisationVector; 
    for (int letter : charArray){ 
     int xorApplied = letter^encryptedLetter; 
     encryptedLetter = applyCaesarCipher(xorApplied, key); 
     encryptedMessageBuilder.append((char) encryptedLetter); 
    } 

    System.out.println(encryptedMessageBuilder.toString()); 
} 

private int applyCaesarCipher(int xorApplied, int key) { 
    return (xorApplied+ key) % 26; 
} 

가능한 무언가에 위의 코드를 변환하는 가장 쉬운 방법은 대신 문자의 ASCII 인코딩

의 나는이 자원을 발견 숫자 0-26 및 사용에 편지를지도하는 것 꽤 좋다. https://www.youtube.com/watch?v=0D7OwYp6ZEc

+0

젠장, 고마워. 자바에 논리 XOR이 있다는 것을 몰랐다. 그래서 암호를 해독하기 위해 읽어야합니다 : 암호화^키^초기화, 암호화^키^암호화, 암호화^키^암호화 ... ...? 그 생각이 사실이라면 적어도 나머지는 직접 구현할 수 있다고 생각합니다 :) –