[英]C# Bit to Bit XOR & File I/O
好的,我有一个35 MB的文件,该文件已使用逐位XOR(我相信是逐位XOR)加密,我想知道一种解密该文件的好方法,然后使用C#上的文件I / O再次对其进行加密。 。
这是Enc / Dec算法:
Encrypt:----------------------Decrypt:
Bit 0 -> Bit 26--------------Bit 0 -> Bit 18
Bit 1 -> Bit 31--------------Bit 1 -> Bit 29
Bit 2 -> Bit 17--------------Bit 2 -> Bit 7
Bit 3 -> Bit 10--------------Bit 3 -> Bit 25
Bit 4 -> Bit 30--------------Bit 4 -> Bit 15
Bit 5 -> Bit 16--------------Bit 5 -> Bit 31
Bit 6 -> Bit 24--------------Bit 6 -> Bit 22
Bit 7 -> Bit 2--------------Bit 7 -> Bit 27
Bit 8 -> Bit 29--------------Bit 8 -> Bit 9
Bit 9 -> Bit 8--------------Bit 9 -> Bit 26
Bit 10 -> Bit 20--------------Bit 10 -> Bit 3
Bit 11 -> Bit 15--------------Bit 11 -> Bit 13
Bit 12 -> Bit 28--------------Bit 12 -> Bit 19
Bit 13 -> Bit 11--------------Bit 13 -> Bit 14
Bit 14 -> Bit 13--------------Bit 14 -> Bit 20
Bit 15 -> Bit 4--------------Bit 15 -> Bit 11
Bit 16 -> Bit 19--------------Bit 16 -> Bit 5
Bit 17 -> Bit 23--------------Bit 17 -> Bit 2
Bit 18 -> Bit 0--------------Bit 18 -> Bit 23
Bit 19 -> Bit 12--------------Bit 19 -> Bit 16
Bit 20 -> Bit 14--------------Bit 20 -> Bit 10
Bit 21 -> Bit 27--------------Bit 21 -> Bit 24
Bit 22 -> Bit 6--------------Bit 22 -> Bit 28
Bit 23 -> Bit 18--------------Bit 23 -> Bit 17
Bit 24 -> Bit 21--------------Bit 24 -> Bit 6
Bit 25 -> Bit 3--------------Bit 25 -> Bit 30
Bit 26 -> Bit 9--------------Bit 26 -> Bit 0
Bit 27 -> Bit 7--------------Bit 27 -> Bit 21
Bit 28 -> Bit 22--------------Bit 28 -> Bit 12
Bit 29 -> Bit 1--------------Bit 29 -> Bit 8
Bit 30 -> Bit 25--------------Bit 30 -> Bit 4
Bit 31 -> Bit 5--------------Bit 31 -> Bit 1
这不是按位异或-实际上是按位替换密码 。 您意识到这只是从最广义上讲的“加密”,对吗?
基本上,您将需要两个步骤:
BinaryReader
和BinaryWriter
。 (显然,您可以使用缓冲进行优化,但这是一般要点。)
您可能会发现,使用uint
而不是int
最简单,以避免担心符号位。 像这样:
public static uint Encrypt(uint input)
{
return (((input >> 0) & 1) << 26) |
(((input >> 1) & 1) << 31) |
(((input >> 2) & 1) << 17) |
...
(((input >> 31) & 1) << 5);
}
您可以使用用于加密的表和用于解密的表来使该表驱动,但是我不确定是否会打扰。
请注意,如果您实际上是用它来存储敏感信息,则应尽快开始使用真实加密。
那不是XOR 。 如果是这样,您只需再次对具有相同值的数据进行XOR 解密 。
您所描述的是某种位加扰加密。
正如其他人所说,这不是安全加密。 它使用一种通常称为“ 通过隐蔽性进行安全保护 ”的方法。
首先,您必须执行一个获取单个位的函数,以及一个将其保存到所需位置的函数:
int getBit(int position, int word)
{
return ((word >> position) & 1);
}
void setBit(int position, int value, ref word)
{
word = (word & (value << position));
}
然后,您必须手动进行每次转换,例如(如果我正确理解您的算法):
int b1 = getBit(0, word);
int b2 = getBit(18, word);
setBit(0, b1 ^ b2, ref word);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.