vb语言中Xor是啥意思?

vb语言中Xor是啥意思?,第1张

VB语言中的XOR是一个按位异或运算符

例如:print 65 xor 120 在VB程序的立即窗口里显示是57 将65和120 换成二进制,就是1000001和1111000,然后,将它们右端对齐,进行逐位的异或运算:

1 0 0 0 0 0 1

1 1 1 1 0 0 0 (xor

————————————————————

0 1 1 1 0 0 1

111001换成十进制,就是57啦

规则就是:

相同得0,不同得1

因为VB本身是不存在“二进制数”这么一种数据类型的,你如果直接算 1000001 XOR 01111111,VB会把1000001和01111111按10进制数来看待的,所以结果是2078214!

你应该先把1000001和01111111都转化为10进制数,再来XOR!

补充一下:

VB中16进制数和8进制数有特殊的表示方法,比如:

x = &HABCD   '这是16进制

x = &O3456    '这是8进制,注意&后面的是字母O!

但是,变量x中存储的是经过VB转化后的10进制数,因为VB并没有“16进制数”、“8进制数”这样的数据类型,凡是数值类型(Integer、Long、Double、Single等等)全部是10进制的!

而二进制数则连这样的特殊表示方法也没有,

x = 1000

你说这个1000是二进制还是10进制?总不能说由0和1组成的就是二进制吧?要是你老板要发1000元工资给你,却说这是个二进制数,那么你就只能得到8元钱了!

根据你对题目的补充作出的补充回答:

我不知道是哪个脑残的老师出的题目,两个数进行异或运算,运算结果与这两个数的进制是没有半毛钱关系的,比如:

10进制:20 Xor 30 = 10

16进制:&H14 Xor &H1E = &H0A = 10进制的10

看见没有,结果不是都是10吗?所以你说的“必须用二进制进行异或运算”是错误的,除非是你的脑残老师一定要你们这么做。

所以这条题目最简单的解决办法就是把秘钥01111111转为10进制数(即127),然后用它与大写字母的ASCII码进行异或运算,最后把运算结果再转为字符即可。下面是个例子:

s = "ABCDEFGHIJKLM"

Print "加密前的字符串:" s

t = ""

For i = 1 To Len(s)

    t = t & Chr(Asc(Mid(s, i, 1)) Xor 127)

Next

Print "加密后的字符串:" t

如果非得按题目要求转为二进制数再来异或,那就复杂10倍也不止了。首先,要把加密前的字符串逐个取出来,转为ASCII码,再转为二进制数(注意,二进制数要放在一个字符串变量中,因为我前面已经说了,VB中没有专门的二进制数类型的,所以如果放在数值变量中,VB会按10进制数来看待的),然后逐位与01111111进行异或运算(就是依次从上述储存二进制数的字符串变量中取出每一位数与01111111对应的位进行异或运算,如果相同就是0,不同就是1),比如:

01000001

01111111

-------------

00111110

把得出的运算结果再转为10进制数(上面例子中就是62),然后通过这个数再得出加密后的字符。你会发现,经过这么复杂运算得到的字符,跟我上面的代码运算的结果其实是一样的!

Private Sub hidebyte(l() As Byte, d() As Byte) 'l()图片信息,d()秘密信息

Dim i As Long, j As Long, k As Long'i,j 为循环变量,k为隐藏的位置

For i = LBound(d) To UBound(d)

k = (i - 1) * 4 + 1

For j = 0 To 3

l(j + k) = l(j + k) Xor d(i)

Next j

Next i

End Sub


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12024825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存