【发布时间】:2020-10-06 03:02:48
【问题描述】:
我有以下异或移位编码器
char a[] = "text";
int b = strlen(a);
for (int c = 0; c < b; c++) {
if (c > 0) a[c] ^= a[c-1];
a[c] ^= a[c] >> 3;
a[c] ^= a[c] >> 2;
a[c] ^= a[c] >> 1;
printf("%02x", (unsigned int)(a[c]));
}
我想将十六进制输出恢复为原始字符串。
考虑到在某些情况下移位会消除右侧无法再检索的位,这是否可能?如果可能,如何恢复操作?
【问题讨论】:
-
高达 256 个可能的值。建立一个查找表。
-
@n.'pronouns'm。我之前回答过类似的想法,但看起来每个元素都取决于前一个元素
-
@EugeneSh。 这种依赖很容易可逆。
-
@n.'pronouns'm。确实。所以证明/证明
a[1]的可逆性(通过表格)就足够了