Lan*_*nes 32 encryption openssl
我有爱丽丝的公钥。我想向 Alice 发送 RSA 加密消息。我该如何使用openssl
命令?
消息是:
嗨爱丽丝!晚餐请带上malacpörkölt!
Gil*_*il' 44
在openssl 手册(openssl
手册页)中,搜索RSA
,您将看到 RSA 加密的命令是rsautl
. 然后阅读rsautl
手册页以查看其语法。
echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted
Run Code Online (Sandbox Code Playgroud)
默认填充方案是原始的 PKCS#1 v1.5(仍在许多协议中使用);openssl 还支持 OAEP(现在推荐)和原始加密(仅在特殊情况下有用)。
请注意,直接使用 openssl 主要是一种练习。在实践中,您会使用诸如gpg 之类的工具(它使用 RSA,但不直接加密消息)。
pen*_*359 27
首先,如果你只是想要好的加密,你应该看看GnuPG。但是,如果您正在试验并且只想了解它是如何工作的,那么您需要了解RSA是什么。RSA 并非旨在加密任何任意字符串,它是一种加密整数的算法。具体来说,一个从 0 到 n-1 的整数,其中 n 是来自公钥的模值。当您谈论 1024 位的 RSA 密钥时,这意味着需要 1024 位才能以二进制形式存储模数。这是原因之一,RSA 与对称密钥密码(如DES或AES)结合使用. 您可以为 AES 生成一个随机的 256 位密钥,并使用 1024 位 RSA 公钥加密该密钥。然后任何访问私钥的人都可以提取对称密钥并使用 AES 解码消息。RSA 的完整标准称为PKCS #1
此外,DES 和 AES 是分组密码。它们只加密特定大小的块中的数据。DES 使用 64 位块,AES 使用 128 位块。要加密多个块,您必须使用操作模式像 CBC 或 CTR 这样。这些模式指定如何使用块模式密码加密位流。
最后,验证您收到的数据很重要。虽然攻击者可能无法读取传输中的数据,但如果数据流没有应用完整性或真实性,他可能能够在没有检测的情况下翻转位。攻击者很容易猜测到端口 443 的 SSL 连接可能是一个以 开头的网页请求GET /
,他可以将位更改为 ,PUT /
而不会干扰其余的加密。一种简单的完整性方法是在末尾附加一个 MD5 或 SHA-1 和,但这仅提供数据完整性,而不提供数据真实性。任何对数据流有完整知识的人都可以生成正确的和,更安全的方法是使用像HMAC这样的密钥散列 这需要知道密钥才能生成,从而除了完整性之外还提供数据真实性。
在下面,请注意您可以指定您想要的任何算法,无论是列出的算法还是 RSA(尽管我不知道 OpenSSL 用于 RSA 的确切名称)
使用“openssl enc -help”获取系统支持的密码列表,并将其作为参数传递。例如,“-aes256”
请注意,在我的系统中,我的选项中没有 RSA - 至少是那个名字。
如何加密 S/MIME 消息?
假设有人向您发送了她的公共证书,并要求您加密一些给她的消息。您已将她的证书保存为 her-cert.pem。您已将回复保存为 my-message.txt。
要获得默认的(尽管相当弱)RC2-40 加密,您只需告诉 openssl 消息和证书所在的位置。
openssl smime her-cert.pem -encrypt -in my-message.txt
如果您非常确定您的远程通讯员有一个强大的 SSL 工具包,您可以指定一个更强大的加密算法,如三重 DES:
openssl smime her-cert.pem -encrypt -des3 -in my-message.txt
默认情况下,包括邮件头在内的加密消息被发送到标准输出。使用 -out 选项或您的 shell 将其重定向到一个文件。或者,更棘手的是,将输出直接通过管道发送到 sendmail。
openssl smime her-cert.pem \
-encrypt \
-des3 \
-in my-message.txt \
-from 'Your Fullname <you@youraddress.com>' \
-to 'Her Fullname <her@heraddress.com>' \
-subject 'My encrypted reply' |\
sendmail her@heraddress.com
Run Code Online (Sandbox Code Playgroud)
如何签署 S/MIME 消息?
如果您不需要对整个消息进行加密,但确实希望对其进行签名,以便您的收件人可以确保消息的完整性,则该方法与加密方法类似。主要区别在于您需要拥有自己的密钥和证书,因为您无法使用收件人的证书签署任何内容。
openssl smime \
-sign \
-signer /path/to/your-cert.pem \
-in my-message.txt \
-from 'Your Fullname <you@youraddress.com>' \
-to 'Her Fullname <her@heraddress.com>' \
-subject 'My signed reply' |\
sendmail her@heraddress.com
Run Code Online (Sandbox Code Playgroud)
(来自http://www.madboa.com/geek/openssl/)
(呃......所有那些反斜杠 - 那些应该是转义的换行符。不知道发生了什么,因为它在我的编辑框中显示得很好!