gpt4 book ai didi

java - 如何使用 AES 生成实际的加密文件? [JAVA]

转载 作者:行者123 更新时间:2023-12-01 13:12:15 27 4
gpt4 key购买 nike

您好,我探索了许多有关 AES 加密的好网站,大多数网站都会详细介绍如何加密文件,并真正帮助我了解 AES 加密。

但我仍然不清楚如何生成加密的文件。这个tutorial example解释一下 AES 加密是如何完成的,但我仍然看不到物理加密文件。大多数例子只展示了如何加密和解密,但没有解释如何生成加密的物理文件。

我的问题是我们如何实际生成实际的加密文件,我相信这个问题与 SO 公民相关,因为这可能会在将来帮助其他人。

回答下面的代码将使用物理加密文件加密文本文件。

final Path origFile = Paths.get("C:\\3.txt");
final byte[] contents = Files.readAllBytes(origFile);

// 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(contents.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);

final Path newFile = Paths.get("C:\\3encrypted.aes");
Files.write(newFile, encrypted, StandardOpenOption.CREATE);

}

正如 fge 所建议的,这不适合加密大文件。当我完成研究后,我将提供新的答案。

最佳答案

您的代码不正确;您尝试从文件中读取字节,然后将其放入 StringBuffer 中,这是一个字符序列。不要这样做!

直接读取字节:

final Path origFile = Paths.get("C:\\3.txt");
final byte[] contents = Files.readAllBytes(origFile);

然后像您一样加密,并将您的加密字节数组写入新文件中:

final Path newFile = Paths.get("C:\\3encrypted.aes"); // or another name
Files.write(newFile, encrypted, StandardOpenOption.CREATE);
<小时/>

了解String不适合二进制数据非常重要。请参阅this link了解更多详情。

关于java - 如何使用 AES 生成实际的加密文件? [JAVA],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22754788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com