在RSA cryptograohy中加密时间是否比解密时间短?

Mhs*_*hsz 0 benchmarking cryptography rsa public-key-encryption

我将实现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);
}
Run Code Online (Sandbox Code Playgroud)

请对这些结果有任何解释

osg*_*sgx 5

请不要自己实施RSA,这样做很容易做错,编写版本需要数月才能抵抗3-4种较旧的加密攻击.

你写过的所有加密代码都可能被打破 - Tony Arcieri

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

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

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

在RSA的工业实现中,使用某人的公钥加密比使用私钥解密更快,因为公钥具有短的公共指数e,通常为65537(0x10001).当使用快速取幂时,这是正确的(名为Exponentiation_by_squaring的方法).该操作的时间线性地取决于位长度,并且线性地取决于1指数值中的位计数,长度和计数都小于65537(17位长度和​​2位处于状态1).

在伪代码 RSA样操作,e是32位,它通常比较短d,因此使用操作e指数比同样具有更快d.