Rust を使用した CryptoPals Crypto Challenges: Fixed XOR
3541 ワード
これは、Rust 言語で実装された Challenge 2 の課題のうちの Cryptopals です.
同様の長さの 2 つの 16 進数でエンコードされた文字列が与えられた場合、その xor を返す必要があります.
XOR (or, Exclusive OR) は、ビットに対するバイナリ演算 (AND、OR など) です. XOR は、2 つの入力が異なる場合に true/1 を返し、それ以外の場合は false/0 を返します.
したがって、理論的には、次のように、16 進数を 2 進数に変換し、それらを xor して出力を得ることができます.
Rust で課題を解決するには、
これで完了です.
Github のコードを参照してください.
私を見つける:
ツイッター -
naveeen.com
環境
同様の長さの 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
Reference
この問題について(Rust を使用した CryptoPals Crypto Challenges: Fixed XOR), 我々は、より多くの情報をここで見つけました https://dev.to/nvn/cryptopals-crypto-challenges-using-rust-fixed-xor-4e96テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol