私は以下のコードで問題があります。
RSAの2つの方法ENCRYPT
とDECRYPT
を作成しました。公開鍵と秘密鍵を取得するために、鍵を生成するのにkeyGenerator
とKeyPair
を使用しました。私たちのシニアは、KeyPair
は私たちがそれを使うところで呼び出さなければならないと言っていました。メソッドの前に宣言してはいけません。はRSA暗号化のヘルプが必要
私はキー生成のための別のメソッドを作成しようとしましたが、両方のメソッド(ENCRYPT
とDECRYPT
)でそのメソッドを呼び出すと、復号化に一致しない2つの異なるキーが生成されます。
私はコンストラクタを作成し、それをメソッドで呼び出すように指示されています。どのように正確にそれを呼び出すのか、それがどのように機能するのかはわかりません。
以下のコードを参考にしてください。ありがとうございました。
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