如何在Java中实现RSA加密和解密

时间:2011-01-01 02:02:23

标签: java rsa

我有公钥和私钥生成工作。我的下一步是创建另外两种方法 - 加密和解密。我只是不确定如何实现加密和解密。我有一些想法,但似乎没有什么好的解决方案。任何见解?

public class RSA
{
    private final static BigInteger one = new BigInteger("1");
    private final static SecureRandom random = new SecureRandom();

    // prime numbers
    private BigInteger p;
    private BigInteger q;

    // modulus
    private BigInteger n;

    // totient
    private BigInteger t;

    // public key
    private BigInteger e;

    // private key
    private BigInteger d;

    /**
     * Constructor for objects of class RSA
     */
    public RSA(int N)
    {
        p = BigInteger.probablePrime(N/2, random);
        q = BigInteger.probablePrime(N/2, random);

        // initialising modulus
        n = p.multiply(q);

        // initialising t by euclid's totient function (p-1)(q-1)
        t = (p.subtract(one)).multiply(q.subtract(one));

        // initialising public key ~ 65537 is common public key
        e = new BigInteger("65537");
    }

    public int generatePrivateKey()
    {
         d = e.modInverse(t);
         return d.intValue();
    }
}

2 个答案:

答案 0 :(得分:4)

由于你还没有真正问过一个具体的问题,我会给你一个相似的答案。

DIY Crypto有点像DIY核电。

我建议您阅读bouncy castle,如果您想了解加密编码,并使用它而不是自己编写。

答案 1 :(得分:0)

不确定您要问的是什么,但对于RSA加密,如果您的模数 n 位宽,则您的公钥也将 n 位宽。一个简单的int将不起作用。

另见

我自己在Java中对RSA加密的谦卑尝试:
http://david.tribble.com/src/java/tribble/crypto/RSACipher.java