使用 RSA 加密哈希

使用 RSA 加密哈希

我必须加密哈希,例如:

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 密钥文件向您的预期收件人发送一些其他文本,以验证所有内容是否正确,然后再发送您的“真实”数据 - 我希望与您输入的问题不同! (除非您只是使用加密进行身份验证)。

相关内容