我正在开发一个允许用户加密多个文件的java应用程序。我使用128位密钥的AES。我在这项工作中遇到以下问题: -
实施的AES算法仅适用于.txt文件,但它不适用于任何其他文件类型,如Office文档,图像等。我的问题是 AES适用于所有类型的数据或仅文本文件?我搜索了很多,但我找到的所有示例都使用.txt文件。
目前,我将文件的内容读入字符串,然后加密,然后将加密的字符串写回文件。我的问题是有没有办法在不读取文件内容的情况下加密文件?
有没有办法使用AES解密目录(文件夹)及其所有内容?通过“解密目录”我的意思是它无法打开并显示一些错误消息当试图打开时。
此外,可以编辑,删除,移动,复制和重命名加密文件。我希望没有人可以对我的应用程序加密的文件执行这些操作。 怎么做?
以下是我正在使用的代码,但仅适用于.txt文件而不适用于其他人。不知道是什么问题:
import java.io.File;
import java.io.FileInputStream;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class JavaCrypt
{
public static void main(String[] args) throws Exception {
File f=new File("D:/a.txt");
int ch;
StringBuffer strContent = new StringBuffer("");
FileInputStream fin = null;
try {
fin = new FileInputStream(f);
while ((ch = fin.read()) != -1)
strContent.append((char) ch);
fin.close();
}
catch (Exception e) {
System.out.println(e);
}
System.out.println("Original string: " +strContent.toString()+"\n");
// Get the KeyGenerator
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128); // 192 and 256 bits may not be available
// Generate the secret key specs.
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
// Instantiate the cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(strContent.toString().getBytes());
System.out.println("encrypted string: " + encrypted.toString());
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] original =cipher.doFinal(encrypted);
String originalString = new String(original);
System.out.println("Original string: " +originalString);
}
}
答案 0 :(得分:1)
是的,AES适用于所有数据。
没有
是
压缩目录和内容,然后加密Zip文件。使用HMAC确保没有人对加密文件感到困惑。
你说,"请尽快回复,因为我必须在几天内提交这个项目,并且我非常努力地解决这些问题。"正如您现在所了解的那样,将事情留到最后一分钟并不是获得良好结果的好方法:正确的计划可以防止绩效不佳。
如果你早点看过事情,那么你就没有太多时间来解决问题了。