执行此代码时:
Dim bytearray() As Byte = System.IO.File.ReadAllBytes("C:\Users\Fery Ferdiansyah\Desktop\asd\asd.txt")
Dim key() As Byte = System.Text.Encoding.UTF8.GetBytes("swagger")
Dim bf As New blowfish2(key)
此函数中的此语法y = S(0, a) + S(1, b)
会导致算术溢出:
Private Function F(ByVal x As UInteger) As UInteger
Dim a As UShort
Dim b As UShort
Dim c As UShort
Dim d As UShort
Dim y As UInteger
d = CUShort((x And &HFF))
x >>= 8
c = CUShort((x And &HFF))
x >>= 8
b = CUShort((x And &HFF))
x >>= 8
a = CUShort((x And &HFF))
y = S(0, a) + S(1, b)
y = y Xor S(2, c)
y = y + S(3, d)
Return y
End Function
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
您可以禁用整数溢出检查(Advanced Compiler Settings Dialog Box (Visual Basic))或将y
声明为UInt64然后
Return CUInt(y And &HFFFFFFFF)
答案 1 :(得分:0)
添加两个整数(Int32
)的结果必须存储到Int64
中,以确保结果可以存储而不会溢出。
因此,在这种情况下,您的方法应该返回UInt64
,y也应该是UInt64
。