我在下面的代码有问题。
我已经创建了两个方法ENCRYPT
和DECRYPT
为RSA。为了获得公钥和私钥,我使用了keyGenerator
和KeyPair
来生成密钥。我们的前辈告诉我应该在我们使用它的地方调用KeyPair
,它不应该在方法之前声明。需要RSA加密帮助
我试图创建密钥生成单独的方法,但是当我调用两种方法(ENCRYPT
和DECRYPT
)这个方法,它会产生不匹配,因此解密是行不通的两个不同的密钥。
有人告诉我,创建构造函数,然后调用它的方法。我不知道如何称呼它以及它如何工作。
请大家看看下面我的代码和帮助我。谢谢。
public class Encryption
{
static byte[] encrypted;
public Encryption() throws NoSuchAlgorithmException, NoSuchProviderException
{
KeyPair keypair;
KeyPairGenerator keygenerator = KeyPairGenerator.getInstance("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keygenerator.initialize(1024, random);
keypair = keygenerator.generateKeyPair();
}
public String ENCRYPT(String Algorithm, String Data) throws Exception
{
String alg = Algorithm;
String data=Data;
if(alg.equals("RSA"))
{
stack enc=new stack();
//Don't know how to call constructor here
PublicKey publicKey = keypair.getPublic();
Cipher cipher;
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
encrypted = cipher.doFinal(data.getBytes());
System.out.println("Encrypted String -> " + asHex(encrypted));
}
return asHex(encrypted);
}
public String DECRYPT(String Algorithm, String Data) throws Exception
{
String alg = Algorithm;
String Decrypted="";
if(alg.equals("RSA"))
{
//have to call constructor here to get keypair value
PrivateKey privateKey = keypair.getPrivate();
Cipher cipher;
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] dec = cipher.doFinal(encrypted);
Decrypted=new String(dec);
System.out.println("Decrypted String[RSA] -> " + Decrypted);
}
return Decrypted.toString();
}
public static String asHex (byte buf[])
{
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++)
{
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}
}
如果你不知道如何Java的建设者的工作(包括事实,你不能命名它们从不同的类),我建议你读课本或[Java教程](http://docs.oracle的.com/JavaSE的/教程/ JAVA/index.html中)。 – 2012-04-18 02:53:57
很高兴看到你修复了这个问题。 – 2012-04-18 02:54:50
忘记更改构造函数名称 – Avinash 2012-04-18 02:59:20