2017-11-16 32 views
1

私はCBCモードで暗号化することで簡単なシーザー暗号化を改善しています。CBCでシーザー/ JavaでXORする方法は?

私が理解しているように、最初の文字は初期化ベクトルによって排他的論理和演算され、次にキーによって出力が暗号化されたテキストの最初の文字になります。これは2番目の文字でXORされ、次にキーで再びXORされます。

XORingがどのように機能するのかよくわかりません。

私たちは(スペースのみとAZ)指定された変換テーブルを持ってみましょう: /秒:0、A:1、B:2、...、Z:26、 キー:1、 Init.vector:5

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

簡単シーザー、'ハロー '' を使用して

しかし、CBCを使ってどのように暗号化するのですか?

Javaで実装する方法を教えていただければ特に役に立ちます。ありがとう!

答えて

1

あなたがあなたの暗号の鍵でXORしたいと思うよううーん、私はあなたの質問を解釈し、これは間違っている:

あなたは暗号からの前の結果によって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

ありがとう。 Javaに論理XORがあることさえ知りませんでした。だから私は解読するために読む、私はしなければならない:encLetter^key^init、encLetter^key^encLetter、encLetter^key^encLetter、...?その考えが真実ならば、私は少なくとも残りの部分を自分自身で実装しようとすることができます:) –

関連する問題