# 如何用密码或key-file来对文件进行加/解密

## 为什么我们需要对文件进行加密

文件加密的重要性有以下几点：

* 防止设备丢失或窃贼：如果笔记本或手机等设备丢失或被盗，加密后的文件可以防止其他人从设备获取敏感信息。
    
* 数据保护：加密可以保护你的信息，禁止非授权访问。
    
* 病毒感染：加密文件是应对病毒、黑客攻击的关键手段。
    
* 安全文件共享：当你在互联网传输文件，加密确保你的文件在传输中不被任何人偷窥。
    

当文件被加密后，如果没有正确的解密key，任何人都无法读取任何有效信息，只能看到无意义的乱码。

## 如何用密码或key-file来对文件进行加/解密

我们将使用一个名为 `age` 的简洁、现代和安全的工具。

> [https://github.com/FiloSottile/age](https://github.com/FiloSottile/age)

### 用密码来加/解密文件

首先我们来加密文件

```bash
age -p -o yourfile.age yourfile
# 你将看到提示让你输入两次密码，比如 'hello-age'：
# Enter passphrase (leave empty to autogenerate a secure one):
# Confirm passphrase:
```

你有没有看到加密后的文件 `yourfile.age`？

现在我们来对它进行解密

```bash
age -d -o yourfile2 yourfile.age
# 你将看到提示让你输入密码
# Enter passphrase:
```

你应该能看到解密后的文件 `yourfile2`，看一看是否和原文件 `yourfile` 相同。

### 用 key-file 来加/解密文件

首先我们来创建 key-file

```bash
age-keygen -o key-private.txt
# 这个命令会创建私钥文件 key-private.txt 并将公钥输出到屏幕
# Public key: age1v3uzdzzwfzlrh5yg7445lgr4d2xcux0jfh3drvsx8jrqtfmjavhqc845g5

age-keygen -y -o key-public.txt key-private.txt
# 这个命令会创建公钥文件 key-public.txt
```

接下来我们来加密文件

```bash
age -R key-public.txt -o yourfile3.age yourfile
```

你有没有看到加密后的文件 `yourfile3.age`？

最后让我们来解密文件

```bash
age -d -i key-private.txt -o yourfile4 yourfile3.age
```

你应该能看到解密后的文件 `yourfile4`，看一看是否和原文件 `yourfile` 相同。

> ### 为什么不使用 7Z/Zip?
> 
> 他们不支持用 key-file 加密（非对称加密）。
> 
> ### 为什么不使用 GPG(GNU Privacy Guard)?
> 
> GPG 对普通人来说太复杂了。
