2012-04-18 109 views
0

我在下面的代碼有問題。
我已經創建了兩個方法ENCRYPTDECRYPT爲RSA。爲了獲得公鑰和私鑰,我使用了keyGeneratorKeyPair來生成密鑰。我們的前輩告訴我應該在我們使用它的地方調用KeyPair,它不應該在方法之前聲明。需要RSA加密幫助

我試圖創建密鑰生成單獨的方法,但是當我調用兩種方法(ENCRYPTDECRYPT)這個方法,它會產生不匹配,因此解密是行不通的兩個不同的密鑰。

有人告訴我,創建構造函數,然後調用它的方法。我不知道如何稱呼它以及它如何工作。

請大家看看下面我的代碼和幫助我。謝謝。

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(); 
} 

} 
+0

如果你不知道如何Java的建設者的工作(包括事實,你不能命名它們從不同的類),我建議你讀課本或[Java教程](http://docs.oracle的.com/JavaSE的/教程/ JAVA/index.html中)。 – 2012-04-18 02:53:57

+0

很高興看到你修復了這個問題。 – 2012-04-18 02:54:50

+0

忘記更改構造函數名稱 – Avinash 2012-04-18 02:59:20

回答

1

你想keypair是一個私有字段:

private KeyPair keypair; 

在構造函數初始化。初始化就是你已經有的:

keypair = keygenerator.generateKeyPair(); 

不要在構造函數中聲明它爲局部變量。

+0

出現錯誤「密鑰對的非法修飾符」。 – Avinash 2012-04-18 03:03:29

+0

@ user1337792,字段在類中聲明,但在任何方法之外。 – 2012-04-18 03:04:51

+0

起初,我也做了同樣的方法之前使用它,但我的前輩告訴我,我已經宣佈這些密鑰對實例,其中我正好使用(在方法) – Avinash 2012-04-18 03:16:47