【发布时间】:2014-02-09 10:40:19
【问题描述】:
我正在构建一个文件加密实用程序,这是我的加密代码:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
for(int i = 0; i < input.size(); i++){
plainText = input.get(i);
byte[] b = cipher.doFinal(plainText.getBytes("UTF-8"));
String outString = new String(b);
//to be written to file
要加密的字符串从数组中读取(该实用程序进行其他数据处理)然后加密,并在准备好时以字符串数组的形式输出以写入文件。
解密时,我得到一个错误,我的填充错误。我一直在研究并收集这归结为 .getBytes() 没有完全按原样返回字节数组。我正在逐行读取已使用我以前的代码加密的文件。如何确保我的解密函数接收到正确的字节数组?
代码如下:
public void decode(File f) throws Exception{
BufferedWriter out = new BufferedWriter(new FileWriter("Decrypted Archive "+f.getName()+".txt"));
BufferedReader br = new BufferedReader(new FileReader(f));
String line;
while((line = br.readLine())!=null){
byte[] b = line.getBytes("UTF-8");
line = Decoder.decrypt(b);
out.write(line+newline);
}
br.close();
out.close();
还有解密函数:
public static String decrypt(byte[] cipherText) throws Exception{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.DECRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
return new String(cipher.doFinal(cipherText),"UTF-8");
}
加密密钥等都是一样的。
【问题讨论】:
标签: java arrays encryption cryptography