아래 코드에 문제가 있습니다.
RSA 용으로 ENCRYPT
과 DECRYPT
두 가지 방법을 만들었습니다. 공개 키와 비공개 키를 얻으려면 keyGenerator
과 KeyPair
을 사용하여 키를 생성했습니다. 우리 선배는 KeyPair
이 우리가 그것을 사용하는 곳에서 호출되어야한다고 말했고, 그것은 메소드들 앞에 선언되어서는 안됩니다.RSA 암호화 도움말
키 생성을 위해 별도의 메서드를 만들려고했지만 두 메서드 (ENCRYPT
및 DECRYPT
)에서 해당 메서드를 호출하면 해독과 일치하지 않는 두 개의 서로 다른 키가 생성됩니다.
나는 생성자를 생성 한 다음이 메서드에서 호출하도록 지시 받았다. 정확히 어떻게 호출해야하고 어떻게 작동 할 지 모르겠습니다.
아래 코드를보고 도와주세요. 고맙습니다. 생성자에서 초기화
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();
}
}
Java 생성자의 작동 방식 (클래스와 다른 이름을 붙일 수 없다는 사실 포함)을 모르면 교과서 또는 [Java 튜토리얼] (http://docs.oracle.com/)을 읽어 보시기 바랍니다. .com/javase/tutorial/java/index.html). –
고쳐 주신 것을 진심으로 감사드립니다. –
생성자 이름을 변경하는 것을 잊었습니다 – Avinash