RSA アルゴリズムを使用して文字列を暗号化および復号化しようとしています。ここでは、暗号化はうまく機能していますが、復号化に問題があります。コードは DECRYPT メソッドの doFinal に達すると終了します。入力が間違っていますか、それとも公開鍵と秘密鍵に問題がありますか? これに関する提案をお願いします。ありがとう。
public class rsa
{
private KeyPair keypair;
public rsa() throws NoSuchAlgorithmException, NoSuchProviderException
{
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;
byte[] encrypted=new byte[2048];
if(alg.equals("RSA"))
{
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[RSA] -> " + encrypted);
}
return encrypted.toString();
}
public String DECRYPT(String Algorithm, String Data ) throws Exception
{
String alg = Algorithm;
byte[] Decrypted=Data.getBytes();
if(alg.equals("RSA"))
{
PrivateKey privateKey = keypair.getPrivate();
Cipher cipher;
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] dec = cipher.doFinal(Decrypted);
System.out.println("Decrypted String[RSA] -> " + dec.toString());
}
return Decrypted.toString();
}
public static void main(String[] args) throws Exception
{
rsa RSA=new rsa();
RSA.ENCRYPT("RSA", "avinash");
RSA.DECRYPT("RSA","[B@cb7e2c");
}
}
got exception as
Exception in thread "main" javax.crypto.BadPaddingException: Data must start with zero
at sun.security.rsa.RSAPadding.unpadV15(Unknown Source)
at sun.security.rsa.RSAPadding.unpad(Unknown Source)
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:356)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:382)
at javax.crypto.Cipher.doFinal(Cipher.java:2086)
at EncryptionProvider.rsa.DECRYPT(rsa.java:56)
at EncryptionProvider.rsa.main(rsa.java:68)
暗号化された文字列[RSA] -> [B@4a96a