VB.NET处理大整数

时间:2012-04-19 02:18:51

标签: .net vb.net visual-studio

所以我正在创建一个文件crypter,以便我可以加密我正在制作的VB.NET应用程序,以便人们无法对其进行反编译。我在C#中做了这个并且正在将它转移到VB.NET,一切都在C#中运行良好但是一旦我在VB.NET中重写了代码,我在RC4加密方法中得到了这个错误:

'Arithmetic operation resulted in an overflow.'

此处发生错误:

Dim t As Int64 = (s(i) + s(j)) Mod 256

这与c#中的代码相同:

int t = (s[i] + s[j]) % 256;

是否有错误进行计算?为什么它在C#中工作而不是VB.NET?

2 个答案:

答案 0 :(得分:3)

检查VB.NET项目中的高级编译选项(项目属性 - >编译 - >高级编译选项...)。与您的C#项目比较。 VB版本可能检查整数溢出,而C#版本不检查。

当我在VB中运行测试时,此代码会生成异常:

Dim x As Int16 = Int16.MaxValue
Dim y As Int16 = Int16.MaxValue

Dim t As Int64 = (x + y) Mod 256

但是这段代码没有:

Dim t As Int64 = (32767 + 32767) Mod 256

如果我关闭溢出检查,两组代码都会完整而没有错误。

检查等式中每个变量的值,以查看是否可能存在基于加法部分的溢出。加法运算结果的数据类型基于操作中涉及的变量/值的数据类型。这些值可能会导致派生数据类型的结果太大。

答案 1 :(得分:1)

在.Net 4.0中有一种名为BigInteger的新类型:http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

虽然我认为您真正想要的解决方案是对您的代码进行模糊处理,因此即使有人反编译它们也无法读取它:Visual Studio>工具菜单> Dotfuscator的

如果您想完全保护您的代码,您需要支付Remotesoft's Salamander

之类的费用