2012-04-18 3 views
0

아래 코드에 문제가 있습니다.
RSA 용으로 ENCRYPTDECRYPT 두 가지 방법을 만들었습니다. 공개 키와 비공개 키를 얻으려면 keyGeneratorKeyPair을 사용하여 키를 생성했습니다. 우리 선배는 KeyPair이 우리가 그것을 사용하는 곳에서 호출되어야한다고 말했고, 그것은 메소드들 앞에 선언되어서는 안됩니다.RSA 암호화 도움말

키 생성을 위해 별도의 메서드를 만들려고했지만 두 메서드 (ENCRYPTDECRYPT)에서 해당 메서드를 호출하면 해독과 일치하지 않는 두 개의 서로 다른 키가 생성됩니다.

나는 생성자를 생성 한 다음이 메서드에서 호출하도록 지시 받았다. 정확히 어떻게 호출해야하고 어떻게 작동 할 지 모르겠습니다.

아래 코드를보고 도와주세요. 고맙습니다. 생성자에서 초기화

private KeyPair keypair; 

:

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/)을 읽어 보시기 바랍니다. .com/javase/tutorial/java/index.html). –

+0

고쳐 주신 것을 진심으로 감사드립니다. –

+0

생성자 이름을 변경하는 것을 잊었습니다 – Avinash

답변

1

당신이 원하는 keypair는 전용 필드가 될 수 있습니다. 초기화는 이미 가지고있는 것입니다 :

keypair = keygenerator.generateKeyPair(); 

생성자에서 로컬 변수로 선언하지 마십시오.

+0

"Illegal modifier for keypair"오류가 발생했습니다. – Avinash

+0

@ user1337792 필드는 클래스 내부에서 선언되지만 메소드 외부에서 선언됩니다. –

+0

처음에는 똑같은 방법으로 사용했지만, 상급생은 그 키 페어 인스턴스를 정확히 (어디에서 사용하는지) – Avinash