使用 OpenSSL 加密和解密文件_安企神电脑终端安全管理监控软件
安企神电脑监控软件 在线试用
扫码咨询客服
安企神电脑监控软件、局域网监控软件
首页
功能对比
下载中心
购买咨询
客户列表
关于安企神
安企神首页 > 新闻中心

使用 OpenSSL 加密和解密文件

作者:安企神软件 | 日期:2022-07-07 11:50:48

公司上网行为管理,就用安企神软件

使用 OpenSSL 加密和解密文件

加密是对消息进行编码的一种方法,这样可以保护消息的内容免遭他人窥视。一般有两种类型:

  • 密钥加密或对称加密
  • 公钥加密或非对称加密

密钥加密secret-key encryption使用相同的密钥进行加密和解密,而公钥加密public-key encryption使用不同的密钥进行加密和解密。每种方法各有利弊。密钥加密速度更快,而公钥加密更安全,因为它解决了安全共享密钥的问题,将它们结合在一起可以最大限度地利用每种类型的优势。

公钥加密

公钥加密使用两组密钥,称为密钥对。一个是公钥,可以与你想要秘密通信的任何人自由共享。另一个是私钥,应该是一个秘密,永远不会共享。

公钥用于加密。如果某人想与你交流敏感信息,你可以将你的公钥发送给他们,他们可以使用公钥加密消息或文件,然后再将其发送给你。私钥用于解密。解密发件人加密的消息的唯一方法是使用私钥。因此,它们被称为“密钥对”,它们是相互关联的。

如何使用 OpenSSL 加密文件

OpenSSL 是一个了不起的工具,可以执行各种任务,例如加密文件。本文使用安装了 OpenSSL 的 Fedora 计算机。如果你的机器上没有,则可以使用软件包管理器进行安装:

  1. alice $ cat /etc/fedora-release
  2. Fedora release 33 (Thirty Three)
  3. alice $
  4. alice $ openssl version
  5. OpenSSL 1.1.1i FIPS  8 Dec 2020
  6. alice $

要探索文件加密和解密,假如有两个用户 Alice 和 Bob,他们想通过使用 OpenSSL 交换加密文件来相互通信。

步骤 1:生成密钥对

在加密文件之前,你需要生成密钥对。你还需要一个密码短语passphrase,每当你使用 OpenSSL 时都必须使用该密码短语,因此务必记住它。

Alice 使用以下命令生成她的一组密钥对:

  1. alice $ openssl genrsa -aes128 -out alice_private.pem 1024

此命令使用 OpenSSL 的 genrsa 命令生成一个 1024 位的公钥/私钥对。这是可以的,因为 RSA 算法是不对称的。它还使用了 aes128 对称密钥算法来加密 Alice 生成的私钥。

输入命令后,OpenSSL 会提示 Alice 输入密码,每次使用密钥时,她都必须输入该密码:

  1. alice $ openssl genrsa -aes128 -out alice_private.pem 1024
  2. Generating RSA private key, 1024 bit long modulus (2 primes)
  3. ..........+++++
  4. ..................................+++++
  5. e is 65537 (0x010001)
  6. Enter pass phrase for alice_private.pem:
  7. Verifying - Enter pass phrase for alice_private.pem:
  8. alice $
  9. alice $
  10. alice $ ls -l alice_private.pem
  11. -rw-------. 1 alice alice 966 Mar 22 17:44 alice_private.pem
  12. alice $
  13. alice $ file alice_private.pem
  14. alice_private.pem: PEM RSA private key
  15. alice $

Bob 使用相同的步骤来创建他的密钥对:

  1. bob $ openssl genrsa -aes128 -out bob_private.pem 1024
  2. Generating RSA private key, 1024 bit long modulus (2 primes)
  3. ..................+++++
  4. ............................+++++
  5. e is 65537 (0x010001)
  6. Enter pass phrase for bob_private.pem:
  7. Verifying - Enter pass phrase for bob_private.pem:
  8. bob $
  9. bob $ ls -l bob_private.pem
  10. -rw-------. 1 bob bob 986 Mar 22 13:48 bob_private.pem
  11. bob $
  12. bob $ file bob_private.pem
  13. bob_private.pem: PEM RSA private key
  14. bob $

如果你对密钥文件感到好奇,可以打开命令生成的 .pem 文件,但是你会看到屏幕上的一堆文本:

  1. alice $ head alice_private.pem
  2. -----BEGIN RSA PRIVATE KEY-----
  3. Proc-Type: 4,ENCRYPTED
  4. DEK-Info: AES-128-CBC,E26FAC1F143A30632203F09C259200B9
  5. pdKj8Gm5eeAOF0RHzBx8l1tjmA1HSSvy0RF42bOeb7sEVZtJ6pMnrJ26ouwTQnkL
  6. JJjUVPPHoKZ7j4QpwzbPGrz/hVeMXVT/y33ZEEA+3nrobwisLKz+Q+C9TVJU3m7M
  7. /veiBO9xHMGV01YBNeic7MqXBkhIrNZW6pPRfrbjsBMBGSsL8nwJbb3wvHhzPkeM
  8. e+wtt9S5PWhcnGMj3T+2mtFfW6HWpd8Kdp60z7Nh5mhA9+5aDWREfJhJYzl1zfcv
  9. Bmxjf2wZ3sFJNty+sQVajYfk6UXMyJIuWgAjnqjw6c3vxQi0KE3NUNZYO93GQgEF
  10. pyAnN9uGUTBCDYeTwdw8TEzkyaL08FkzLfFbS2N9BDksA3rpI1cxpxRVFr9+jDBz
  11. alice $

要查看密钥的详细信息,可以使用以下 OpenSSL 命令打开 .pem 文件并显示内容。你可能想知道在哪里可以找到另一个配对的密钥,因为这是单个文件。你观察的很细致,获取公钥的方法如下:

  1. alice $ openssl rsa -in alice_private.pem -noout -text
  2. Enter pass phrase for alice_private.pem:
  3. RSA Private-Key: (1024 bit, 2 primes)
  4. modulus:
  5.     00:bd:e8:61:72:f8:f6:c8:f2:cc:05:fa:07:aa:99:
  6.     47:a6:d8:06:cf:09:bf:d1:66:b7:f9:37:29:5d:dc:
  7.     c7:11:56:59:d7:83:b4:81:f6:cf:e2:5f:16:0d:47:
  8.     81:fe:62:9a:63:c5:20:df:ee:d3:95:73:dc:0a:3f:
  9.     65:d3:36:1d:c1:7d:8b:7d:0f:79:de:80:fc:d2:c0:
  10.     e4:27:fc:e9:66:2d:e2:7e:fc:e6:73:d1:c9:28:6b:
  11.     6a:8a:e8:96:9d:65:a0:8a:46:e0:b8:1f:b0:48:d4:
  12.     db:d4:a3:7f:0d:53:36:9a:7d:2e:e7:d8:f2:16:d3:
  13.     ff:1b:12:af:53:22:c0:41:51
  14. publicExponent: 65537 (0x10001)
  15. << 截断 >>
  16. exponent2:
  17.     6e:aa:8c:6e:37:d0:57:37:13:c0:08:7e:75:43:96:
  18.     33:01:99:25:24:75:9c:0b:45:3c:a2:39:44:69:84:
  19.     a4:64:48:f4:5c:bc:40:40:bf:84:b8:f8:0f:1d:7b:
  20.     96:7e:16:00:eb:49:da:6b:20:65:fc:a9:20:d9:98:
  21.     76:ca:59:e1
  22. coefficient:
  23.     68:9e:2e:fa:a3:a4:72:1d:2b:60:61:11:b1:8b:30:
  24.     6e:7e:2d:f9:79:79:f2:27:ab:a0:a0:b6:45:08:df:
  25.     12:f7:a4:3b:d9:df:c5:6e:c7:e8:81:29:07:cd:7e:
  26.     47:99:5d:33:8c:b7:fb:3b:a9:bb:52:c0:47:7a:1c:
  27.     e3:64:90:26
  28. alice $
步骤 2:提取公钥

注意,公钥是你可以与他人自由共享的密钥,而你必须将私钥保密。因此,Alice 必须提取她的公钥,并将其保存到文件中:

  1. alice $ openssl rsa -in alice_private.pem -pubout > alice_public.pem
  2. Enter pass phrase for alice_private.pem:
  3. writing RSA key
  4. alice $
  5. alice $ ls -l *.pem
  6. -rw-------. 1 alice alice 966 Mar 22 17:44 alice_private.pem
  7. -rw-rw-r--. 1 alice alice 272 Mar 22 17:47 alice_public.pem
  8. alice $

你可以使用与之前相同的方式查看公钥详细信息,但是这次,输入公钥 .pem 文件:

  1. alice $
  2. alice $ openssl rsa -in alice_public.pem -pubin -text -noout
  3. RSA Public-Key: (1024 bit)
  4. Modulus:
  5.     00:bd:e8:61:72:f8:f6:c8:f2:cc:05:fa:07:aa:99:
  6.     47:a6:d8:06:cf:09:bf:d1:66:b7:f9:37:29:5d:dc:
  7.     c7:11:56:59:d7:83:b4:81:f6:cf:e2:5f:16:0d:47:
  8.     81:fe:62:9a:63:c5:20:df:ee:d3:95:73:dc:0a:3f:
  9. $

Bob 可以按照相同的过程来提取他的公钥并将其保存到文件中:

  1. bob $ openssl rsa -in bob_private.pem -pubout > bob_public.pem
  2. Enter pass phrase for bob_private.pem:
  3. writing RSA key
  4. bob $
  5. bob $ ls -l *.pem
  6. -rw-------. 1 bob bob 986 Mar 22 13:48 bob_private.pem
  7. -rw-r--r--. 1 bob bob 272 Mar 22 13:51 bob_public.pem
  8. bob $
步骤 3:交换公钥

这些公钥在 Alice 和 Bob 彼此交换之前没有太大用处。有几种共享公钥的方法,例如使用 scp 命令将密钥复制到彼此的工作站。

将 Alice 的公钥发送到 Bob 的工作站:

  1. alice $ scp alice_public.pem bob@bob-machine-or-ip:/path/

将 Bob 的公钥发送到 Alice 的工作站:

  1. bob $ scp bob_public.pem alice@alice-machine-or-ip:/path/

现在,Alice 有了 Bob 的公钥,反之亦然:

  1. alice $ ls -l bob_public.pem
  2. -rw-r--r--. 1 alice alice 272 Mar 22 17:51 bob_public.pem
  3. alice $
  1. bob $ ls -l alice_public.pem
  2. -rw-r--r--. 1 bob bob 272 Mar 22 13:54 alice_public.pem
  3. bob $
步骤 4:使用公钥交换加密的消息

假设 Alice 需要与 Bob 秘密交流。她将秘密信息写入文件中,并将其保存到 top_secret.txt 中。由于这是一个普通文件,因此任何人都可以打开它并查看其内容,这里并没有太多保护:

  1. alice $
  2. alice $ echo "vim or emacs ?" > top_secret.txt
  3. alice $
  4. alice $ cat top_secret.txt
  5. vim or emacs ?
  6. alice $

要加密此秘密消息,Alice 需要使用 openssls -encrypt 命令。她需要为该工具提供三个输入:

  • 秘密消息文件的名称
  • Bob 的公钥(文件)
  • 加密后新文件的名称
  1. alice $ openssl rsautl -encrypt -inkey bob_public.pem -pubin -in top_secret.txt -out top_secret.enc
  2. alice $
  3. alice $ ls -l top_secret.*
  4. -rw-rw-r--. 1 alice alice 128 Mar 22 17:54 top_secret.enc
  5. -rw-rw-r--. 1 alice alice  15 Mar 22 17:53 top_secret.txt
  6. alice $
  7. alice $

加密后,原始文件仍然是可见的,而新创建的加密文件在屏幕上看起来像乱码。这样,你可以确定秘密消息已被加密:

  1. alice $ cat top_secret.txt
  2. vim or emacs ?
  3. alice $
  4. alice $ cat top_secret.enc
  5. �s��uM)M&>��N��}dmCy92#1X�q
TAG:
x

申请试用
看不清?点击更换
* 请注意您的信息真实性,填写资料立即下载软件。

~article_body_code~