java - DSA 签名验证和 BigInteger 类

标签 java encryption biginteger dsa pari

我收到了一个(非常)简单的 DSA 问题,并且已经找到了 key 和其他变量。为了验证签名,我需要以某种方式翻译方程:

V = [(y^u1*h^u2)mod p] mod q

转换为 BigInteger 运算。这在java上可能吗?到目前为止,我一直在成功使用 modPow,但是到目前为止,所有问题都采用以下形式:

r.modPow(指数,模数);

我不知道如何通过 BigInteger 来完成上述方程(特别是粗体部分),我想知道它是否可能。有人有什么想法吗?

如果 BigInteger 做不到,我该如何通过 Pari 来表达这个方程?

最佳答案

我认为你只需要使用该身份

(a*b) mod p == ((a mod p)*(b mod p)) mod p

因此计算 yu1 × hu2 mod p:

  1. 使用 modPow 计算 yu1 mod p,
  2. 使用 modPow 计算 hu2 mod p,
  3. 将第 1 步和第 2 步的结果相乘,
  4. 减少第 3 步 mod p 的结果。

第 4 步是必要的,因为第 1 步和第 2 步的结果相乘可能会产生大于 p 的值。

关于java - DSA 签名验证和 BigInteger 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49716464/

相关文章:

java - 重新启动应用程序时加密 key 会更改吗?

java - BigInteger 抛出空指针异常

java - 多线程问题 - JAVA thread.wait() 必须使用的方法

java - Sonar : Null pointers should not be dereferenced

java - 程序只循环一次但应该循环T次

c# - SHA256CryptoServiceProvider 不符合 FIPS 标准?

java - 使用 Blowfish 时如何修复 Java 中的 NoSuchAlgorithmException?

c# - 二进制到 BigInteger 代码的 ArgumentOutOfRange 异常

java - 分配给 BigInteger 数组中的 an 元素时出错

java - JSch, session 打开时锁定文件