Rust を使用した CryptoPals Crypto Challenges: Fixed XOR


これは、Rust 言語で実装された Challenge 2 の課題のうちの Cryptopals です.

環境



同様の長さの 2 つの 16 進数でエンコードされた文字列が与えられた場合、その xor を返す必要があります.
XOR (or, Exclusive OR) は、ビットに対するバイナリ演算 (AND、OR など) です. XOR は、2 つの入力が異なる場合に true/1 を返し、それ以外の場合は false/0 を返します.

|  A  |  B  |XOR(A^B)|
|-----|-----|--------|
|  0  |  0  |    0   |
|  0  |  1  |    1   |
|  1  |  0  |    1   |
|  1  |  1  |    0   |


したがって、理論的には、次のように、16 進数を 2 進数に変換し、それらを xor して出力を得ることができます.

10110011 ^ 01101011 = 11011000


Rust で課題を解決するには、hex クレートを使用して 16 進文字列をバイト vec にデコードし、2 つの vec を圧縮してから、バイトごとに xor を実行して XOR されたバイトを取得します.最後に、xored バイトを 16 進数にエンコードします.

use hex::{decode, encode};

pub fn fixed_xor(hex1: &str, hex2: &str) -> String {
    let bytes1 = decode(hex1).unwrap();
    let bytes2 = decode(hex2).unwrap();

    let xor_bytes: Vec<u8> = bytes1
        .iter()
        .zip(bytes2.iter())
        .map(|(&b1, &b2)| b1 ^ b2)
        .collect();
    encode(xor_bytes)
}


これで完了です.

Github のコードを参照してください.

私を見つける:
ツイッター -

naveeen.com