我使用ilSpy检索了以下行
p[var1] = (t[var1] + z.c[var1 % z.c.Length]) % 'Ā';
p,t和c是char array []。
我的问题是:他怎么能+人物? t [var1] + z.c [someNumber]是2个字符,然后他在结尾处用数字'A'对结果进行模块化。
答案 0 :(得分:4)
char
是一种整数类型,就像int
和long
一样,因此您可以将它们一起添加并使用%
来表示char
的值实例。
与您添加int
和%
的方式相同。
这解释了上述的工作原理。
意味着什么是一个不同的问题,并不是那么明显。它可能是由于其范围而使用char
,但是用作整数类型。很冷,这是一个将小写字符转换为大写字母的函数(反之亦然),但如果没有更多的上下文,则无法分辨。
您正在使用的反编译器完全有可能误解(或无法完全解释)IL并向您展示与IL等效的内容,但这与原始代码不同。
答案 1 :(得分:0)
如果添加字符,则实际上是调用Int运算符+,因为未在char上定义添加。基本上,字符是数值(只是以不同的方式显示),所以这没问题。他可能用'Â'(数值:256)修改结果,以便结果在1字节的char范围内。
答案 2 :(得分:0)
作为Oded pointed out,ilSpy检索到的表达式在语法上是有效的,但我认为原始代码是不同的。
Ā
(U + 0100,拉丁大写字母A与Macron)的代码为256,表明t
,c
和p
代表某些代码字符串采用单字节编码,如ASCII。那么你从ilSpy获得的代码确实有意义。例如(我刚刚重命名为t
,c
和p
):
encrypted[index] = (source[index] + z.passPhrase[index % z.passPhrase.Length]) % 256;
这里我们有一个简单的加密器,它会循环地为原始字符串添加一些密码。