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