解题思路
本题使用的是循环异或算法。
由于每个十六进制字符都对应4位二进制,所以可以直接按十六进制字符进行处理。
对于data中的第i个字符:
- 将data[i]转换成对应的十六进制数值
P5113.第1题-循环异或加密器
题目内容
给定一个十六进制密钥 key 和一个十六进制数据 data,要求实现循环异或操作:
- 将 key和 data的每个十六进制字符转换为 4位二进制数值
- 对data的每一位与key 的对应位进行异或操作
- data和 key的对齐方式为按照字符顺序从左向右对齐
- 当 key 的长度小于data 时,循环使用key(即 key 重复拼接至与 data 等长)
- 可参考样例1中的对齐、key循环使用以及key截断方式
输入描述
- 第一行输入为 T,1≤T≤200,表示接下来有 T 行,每行一个 key和 data,key 和 data之间通过空格隔开
- key 长度至少为1,不超过10000个字符
- data 长度至少为1,不超过10000个字符
- 字符由数字0~9,大写字符A~F组成
输出描述
- 输出T行,每行对应一个测试用例结果:
- 输出异或后的十六进制大写字符串(长度与data 相同)
样例1
输入
1
A 1234
输出
B89E
说明
key = "A" → 二进制 1010
data = "1234" → 二进制 0001 0010 0011 0100
循环异或过程:
0001 0010 0011 0100 (data)
1010 1010 1010 1010 (key循环使用)
1011 1000 1001 1110 (异或结果)
B 8 9 E
实际输出应该是 "B89E"
样例2
输入
1
FF A5
输出
5A
说明
key = "FF" → 二进制 1111 1111
data = "A5" → 二进制 1010 0101
1010 0101
1111 1111
0101 1010 → "5A"
样例3
输入
2
AB 12345
FF A5
输出
B99FF
5A