gpt4 book ai didi

vb.net - 在 VB.NET 中执行应该溢出的 UInt32 添加的最佳方法

转载 作者:行者123 更新时间:2023-12-02 18:38:43 25 4
gpt4 key购买 nike

在尝试用VB.NET编写ChaCha20加密算法的ARX部分时,我在加法部分遇到了溢出异常的问题。

算法中有很多 UInt32 数字的加法,数字在加法过程中应该会溢出,但在代码的其他部分我想捕获这些异常。

处理此问题并完全避免溢出异常的一种方法是临时转换为 UInt64,然后以这种方式进行添加:

a = (a + b) mod 2^32

我不会遇到任何溢出,但这不适用于 ARX 算法所需的循环位旋转,因为我现在将位插入 64 位 UInt 中的空 32 位。

这种来回转换使算法变慢,并且对于每个 512 位数据 block ,我们要进行 20 轮一组计算,因此这部分代码的性能非常重要。

在 VB.NET 中是否有更优雅的方法来处理这个问题?

有关算法的更多信息: https://en.wikipedia.org/wiki/Salsa20

感谢您分享您的见解!

最佳答案

您可以关闭每个已编译程序集的溢出检查:

enter image description here

所以这意味着您可以拥有一个 DLL,您可以在其中执行所有溢出数学运算,并且该 DLL 项目已选中此复选框(溢出检查已关闭)..

..但是您的主项目需要在溢出 ON 的情况下进行数学计算,但在其自己的编译设置中没有设置此选项

这里我的 OverflowOff 项目是一个启用了“删除检查”的 DLL。某个方法提供的 int maxvalue 溢出到 int minvalue,则使用该 DLL 的表单项目因溢出而崩溃,因为它自己的编译设置被设置为执行溢出检查:

enter image description here

关于vb.net - 在 VB.NET 中执行应该溢出的 UInt32 添加的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68376929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com