使用Java进行AES加密和解密

这是我正在做的事情,可能看起来有些笨拙,但是可以帮助您解决该问题。我得到一个BadPaddingException。阅读几乎所有相关主题,但找不到合适的解决方案。我是加密解密程序设计的新手,需要在我的Java应用程序之一中实现它。

谢谢..这就是代码的样子....

public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

// TODO Auto-generated method stub

String FileName="encryptedtext.txt";

String FileName2="decryptedtext.txt";

String pad="0";

KeyGenerator KeyGen=KeyGenerator.getInstance("AES");

KeyGen.init(128);

SecretKey SecKey=KeyGen.generateKey();

Cipher AesCipher=Cipher.getInstance("AES");

AesCipher.init(Cipher.ENCRYPT_MODE,SecKey);

byte[] byteText="My name is yogesh".getBytes();

byte[] byteCipherText=AesCipher.doFinal(byteText);

String cipherText = null;

try {

FileWriter fw=new FileWriter(FileName);

BufferedWriter bw=new BufferedWriter(fw);

bw.write(byteCipherText.toString());

bw.close();

}catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

FileReader fr=new FileReader(FileName);

BufferedReader br=new BufferedReader(fr);

cipherText=br.readLine();

br.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

AesCipher.init(Cipher.DECRYPT_MODE,SecKey);

while(((cipherText.getBytes().length)%16)!=0)

{

cipherText=cipherText+pad;

}

byte[] bytePlainText=AesCipher.doFinal(cipherText.getBytes());

FileWriter fw1;

try {

fw1 = new FileWriter(FileName2);

BufferedWriter bw1=new BufferedWriter(fw1);

bw1.write(bytePlainText.toString());

bw1.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

回答:

在这里,您需要了解的是密文可能包含不可打印的字符。因此,当您使用readLine()时,它可能不会为您提供文件中的所有字节。

同样,byteCipherText.toString()它并没有给您您认为会得到的。在Java中,该toString()方法不提供数组内容的字符串表示形式。

无需在加密的文本中添加填充。它已经被填充。

import java.nio.file.Files;

import java.nio.file.Paths;

import javax.crypto.*;

public class Main {

public static void main(String[] args) throws Exception {

String fileName = "encryptedtext.txt";

String fileName2 = "decryptedtext.txt";

KeyGenerator keyGen = KeyGenerator.getInstance("AES");

keyGen.init(128);

SecretKey secKey = keyGen.generateKey();

Cipher aesCipher = Cipher.getInstance("AES");

byte[] byteText = "Your Plain Text Here".getBytes();

aesCipher.init(Cipher.ENCRYPT_MODE, secKey);

byte[] byteCipherText = aesCipher.doFinal(byteText);

Files.write(Paths.get(fileName), byteCipherText);

byte[] cipherText = Files.readAllBytes(Paths.get(fileName));

aesCipher.init(Cipher.DECRYPT_MODE, secKey);

byte[] bytePlainText = aesCipher.doFinal(cipherText);

Files.write(Paths.get(fileName2), bytePlainText);

}

}

以上是 使用Java进行AES加密和解密 的全部内容, 来源链接: utcz.com/qa/425528.html

回到顶部