0

我将执行 RSA 加密。我想知道。在 RSA 密码学中,加密比解密快多少倍。我尝试使用 System.currentTimeMillis(); 在 java 中计算经过的时间 但是给我时间加密 = 0.05 毫秒,而时间解密 0.55 毫秒意味着从 1:11 开始。我认为这个结果不合理我的代码如下

//here my key has 256 bits
 for (;;) {
            long begin = System.currentTimeMillis();

            for (int i = 0; i < num; i++) {

            decrypt();
            }

            long end = System.currentTimeMillis();

            long time = end - begin;

            if (time >= 10000) {
                System.out.printf("Average Encryption takes: %.2f ms\n",
                        (double) time / num);
                break;
            }

            num *= 2;
        }

p = BigInteger.probablePrime(128, random);
q = BigInteger.probablePrime(128, random);
N = (p.subtract(one)).multiply(q.subtract(one));
e = BigInteger.probablePrime(32, random);
d = e.modInverse(N);

private void encrypt()
{
    C= M.modPow(e,N);
}

private void decrypt()
{
    RM = C.modPow(d, N);
}

请对这些结果进行任何解释

4

1 回答 1

5

请不要自己实现 RSA,很容易做错,并且需要几个月的时间来编写可以抵抗 3-4 旧密码攻击的版本。

你写过的所有密码都可能被破解了——Tony Arcieri

RSA加密更加困难。实施 RSA 的“最佳实践”是:不要实施 RSA。其他人比你做得更好。——马修·格林(约翰霍普金斯大学)

为什么密码学比看起来更难——Bruce Schneier,1997:

大多数系统不是与密码学家一起设计和实施的,而是由将密码学视为另一个组件的工程师设计和实现的。它不是。

在 RSA 的工业实现中,使用某人的公钥加密比使用私钥解密更快,因为公钥的公钥很短e,通常为 65537 (0x10001)。这是真的,当使用快速求幂时(名为Exponentiation_by_squareing的方法)。此操作的时间线性取决于位长度和1指数值中的位数,长度和计数对于 65537 都很小(17 位长度和 2 位处于状态1)。

在类似 RSA 的操作的伪代码中,它e32 位的,通常比 短,因此使用指数的操作比使用.ded

于 2013-02-18T16:56:44.770 回答