我必须加密哈希,例如:
2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2
mykey.key
通过使用已经提供给我的公钥(例如:)来使用 RSA 算法。我该怎么做呢?我看到网站告诉我使用openssl
,但我不知道如何去做。
编辑:我尝试这样做
我创建了一个文件并通过这样做将哈希值推入其中
echo "2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2" >file.txt
然后是这个
openssl rsautl -inkey mykey.key -pubin -encrypt -in file.txt > file.txt.enc
当我尝试在记事本上打开 file.txt.enc 时,我得到了以下信息:
不确定这是否是成功的加密,因为我需要二进制格式的密文结果。
答案1
不确定这是否是成功的加密,因为我需要二进制格式的密文结果。
好吧,如果你真的想测试加密是否成功,请立即尝试解密,看看是否能恢复明文。如果你能恢复明文,那就好了。
我认为您对“二进制格式”的实际含义感到困惑。
这:
2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2
实际上是一个文本十六进制格式-a文本表示的二进制值。
系统上的任何文件或数据块最终都是一系列字节- 字节(为了简单起见,不用担心位)只是 0 到 255 范围内的数字。您可以将字节写入或显示为十进制数、十六进制数、二进制数或任何需要的内容由应用程序处理字节。
有多种方案可以将文本表示为数字、UTF-8、Unicode 等。
为了说明这一点,文本字符串“2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2”转换为字节后如下(以十进制显示):
50 99 49 52 48 48 102 54 57 56 54 55 53 55 49 97
98 52 101 54 48 100 51 98 56 102 48 49 101 48 98 49
55 99 55 98 101 56 57 101 51 50 49 102 57 49 102 56
97 48 55 99 100 51 57 101 101 98 97 50 48 50 101 50
加上一个换行符。总共 65 个字节,如果您的语言环境使用 16 位字符(例如 Unicode),则为 130 个字节。 Unicode 将与上面的值相同,只是每个值前面有一个 0。显然,它不等于文本所代表的值。
因此,上面的一系列字节是您告诉openssl
实际加密的内容,而不是实际值“2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2”(这将是一个非常长的十进制数)。
因此,根据上述情况,您file.txt.enc
可能由 65 或 130 个随机值组成。这就是记事本试图呈现的内容。
现在,如果你想要文本十六进制表示的内容你的file.txt.enc
- 我认为这会起作用(基于这):
xxd -p file | tr -d '\n'
答案2
尝试:
$ cat file.txt | openssl rsautl -encrypt -pubin -inkey mykey.key > secret.txt
cat secret.txt
}[4�Or)f���r�_
# more binary data here...
进而:
$ cat secret.txt | openssl rsautl -decrypt -inkey myprivatekey.key
2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2
两个密钥都应为 PEM 格式。
答案3
您可以在这里找到许多问题的答案(带有示例):
https://www.madboa.com/geek/openssl/
特别是,如果您通过电子邮件发送过程中的加密结果,您可能希望使用“enc”子命令中的“-a”选项或作为单独的步骤“base64”openssl 子命令对其进行 Base64 编码。
然后,这将产生一个 ASCII 文本结果,而不是不可打印字节的二进制文件。
我建议您首先检查您的加密,创建您自己的(测试)RSA 密钥文件(也使用 openssl,请参阅上面的链接),然后尝试加密-(base64)编码-解码-解密的“往返” 。
如果您使用自己的测试 RSA 密钥(对)得到的结果与您输入的结果相同,那么可以合理地说,至少您的机制都是正确的。
然后,您可以尝试使用提供的 RSA 密钥文件向您的预期收件人发送一些其他文本,以验证所有内容是否正确,然后再发送您的“真实”数据 - 我希望与您输入的问题不同! (除非您只是使用加密进行身份验证)。