计算Android中SHA迭代的轮次

时间:2014-07-21 15:52:02

标签: java android multithreading cryptography

我正在处理在Android设备上必须计算出大量用于SHA的迭代的问题,而不会影响用户体验。困难在于,由于我一直支持Android 2.x,因为最近几代手机之间的计算能力差异巨大,我无法设置硬盘和快速轮数。并且这个数字太低而且不安全,或者它太高而且需要使用低端手机太长时间来计算。

我试图在第一次启动时使用一个线程来计算增加轮数所需的时间,以便在每个手机的基础上找到一个好的数字(ergo从基线数量开始,如果时间低于阈值,增加数字并检查时间是否仍然低于阈值。重复直到超过阈值)。问题在于我使用系统时间来查看计算最终需要多长时间,但是上下文切换会人为地夸大时间值并迫使分析在电话的cpu功率的一小部分被提取之前提前结束。

有没有办法解决这个问题,而不是强迫用户等待,因为我首次在主UI线程上运行此分析?

编辑:至少我认为上下文切换正在搞砸时间。当我在主UI线程上运行它时,迭代分析代码按预期运行,并且SHA散列花费的时间没有奇怪的小问题。当在一个单独的线程上运行时,它对于迭代分析的前几个步骤来说没问题,然后突然会在哈希花费的时间内经历一次巨大的打嗝(大部分时间),并且过早地结束该方法。 / p>

1 个答案:

答案 0 :(得分:0)

啊,我意识到我在想这个问题。在尝试捕获上下文切换引发问题的时候,我试图设置一个上限阈值,基本上说"如果记录的毫秒数大于X,则可能发生了上下文切换,所以忽略并继续。&# 34;这没有用,因为有时上下文切换会将其推到刚刚超过下限的位置。 我刚刚意识到我应该比较最后一次尝试和当前尝试之间的区别。由于用于增加轮数的值很小,如果差值大于约70-80 ms,我知道发生了异常,我应该忽略它并继续。