将硬盘上的一个文本文件进行加密,比较加密文件和原始文件的大小差别;对加密文件进行解密,比较原始文件和解码文件的内容是否一致。
时间: 2023-06-08 21:05:28 浏览: 49
好的,我明白了你的问题。对硬盘上的文本文件进行加密可以采用常用的加密算法,比如AES、DES等。加密后的文件大小会比原始文件略大,因为加密算法会添加一些额外信息。如果加密过程没有失误,解密后得到的文件应该与原始文件完全一致,内容和大小均不发生变化。因此,对解密后得到的文件进行比较,可以验证解密的结果是否正确。
相关问题
实现文件中数据的加解密与压缩:将硬盘上的一个文本文件进行加密,比较加密文件和原始文件的大小差别;对加密文件进行解密,比较原始文件和解码文件的内容是否一致。
这里介绍一种基于 Python 的实现方式。
首先,我们需要安装 PyCrypto 模块,它提供了许多加密算法。
```python
!pip install pycrypto
```
然后,我们按照以下步骤进行:
1. 读取原始文件内容。
2. 对文件内容进行加密。
3. 将加密后的内容写入到一个新文件中,同时计算加密前后文件大小差别。
4. 读取加密后的文件内容。
5. 对文件内容进行解密。
6. 将解密后的内容写入到一个新文件中。
7. 比较原始文件和解密后的文件内容是否一致。
以下是代码实现:
```python
import os
from Crypto.Cipher import AES
import zlib
# 加密密钥,长度必须为16、24或32字节
key = b'1234567890123456'
# 原始文件名和加密后的文件名
src_file = 'test.txt'
enc_file = 'test_encrypted.bin'
dec_file = 'test_decrypted.txt'
# 读取原始文件内容
with open(src_file, 'rb') as f:
data = f.read()
# 对文件内容进行加密
iv = os.urandom(16)
cipher = AES.new(key, AES.MODE_CBC, iv)
enc_data = cipher.encrypt(zlib.compress(data))
# 将加密后的内容写入到一个新文件中,同时计算加密前后文件大小差别
with open(enc_file, 'wb') as f:
f.write(iv)
f.write(enc_data)
print('原始文件大小:', os.path.getsize(src_file))
print('加密文件大小:', os.path.getsize(enc_file))
print('加密前后文件大小差别:', os.path.getsize(enc_file)-os.path.getsize(src_file))
# 读取加密后的文件内容
with open(enc_file, 'rb') as f:
iv = f.read(16)
enc_data = f.read()
# 对文件内容进行解密
cipher = AES.new(key, AES.MODE_CBC, iv)
data = zlib.decompress(cipher.decrypt(enc_data))
# 将解密后的内容写入到一个新文件中
with open(dec_file, 'wb') as f:
f.write(data)
# 比较原始文件和解密后的文件内容是否一致
with open(src_file, 'rb') as f1, open(dec_file, 'rb') as f2:
if f1.read() == f2.read():
print('解密成功!')
else:
print('解密失败!')
```
需要注意的是,这里使用了 zlib 模块对加密后的内容进行了压缩,这样可以减小文件大小。但是,压缩的时候也会带来一些额外的开销,因此加密前后文件大小的差别可能并不是非常明显。
用java实现对文本文件进行加密和解密操作
可以使用Java的加密解密API来对文本文件进行加密和解密操作。下面是一个简单的示例代码:
```java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
public class FileEncryptionDecryption {
private static final String ALGORITHM = "AES";
private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
private static final String KEY_FILE = "key.txt";
public static void encrypt(String inputFile, String outputFile) throws Exception {
Key secretKey = getSecretKey();
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
try (BufferedReader reader = new BufferedReader(new FileReader(inputFile))) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {
String line;
while ((line = reader.readLine()) != null) {
byte[] encrypted = cipher.doFinal(line.getBytes());
writer.write(Base64.getEncoder().encodeToString(encrypted));
writer.newLine();
}
}
}
}
public static void decrypt(String inputFile, String outputFile) throws Exception {
Key secretKey = getSecretKey();
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
try (BufferedReader reader = new BufferedReader(new FileReader(inputFile))) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {
String line;
while ((line = reader.readLine()) != null) {
byte[] encrypted = Base64.getDecoder().decode(line);
byte[] decrypted = cipher.doFinal(encrypted);
writer.write(new String(decrypted));
writer.newLine();
}
}
}
}
private static Key getSecretKey() throws Exception {
Key secretKey;
if (new File(KEY_FILE).exists()) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(KEY_FILE))) {
secretKey = (Key) ois.readObject();
}
} else {
KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
keyGenerator.init(128);
secretKey = keyGenerator.generateKey();
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(KEY_FILE))) {
oos.writeObject(secretKey);
}
}
return secretKey;
}
}
```
在上面的示例代码中,我们使用了AES算法来进行加密和解密操作。我们还使用了Base64来对加密后的文本进行编码,以便于在文件中进行存储和读取。
你可以通过调用 `encrypt` 方法来加密一个文本文件,调用 `decrypt` 方法来解密一个加密后的文本文件。
下面是一个使用示例:
```java
public static void main(String[] args) throws Exception {
FileEncryptionDecryption.encrypt("original.txt", "encrypted.txt");
FileEncryptionDecryption.decrypt("encrypted.txt", "decrypted.txt");
}
```
在上面的示例中,我们将 `original.txt` 文件加密并保存到 `encrypted.txt` 文件中,然后将加密后的文本文件解密并保存到 `decrypted.txt` 文件中。