当前位置: 首页 > 知识库问答 >
问题:

如何解密HTTPS应用层的数据?

逑俊楚
2023-03-14

我正在用Lisp编写一个web服务器来处理HTTPS请求。我遵循TLS1.2,已经完成了握手过程。我选择的密码套件是TLS\u RSA\u和RC4\u 128\u SHA。我已经计算了客户端写入MAC密钥、服务器写入MAC密钥、客户端写入密钥、服务器写入密钥。这些密钥似乎是正确的,因为我可以解密来自浏览器的“完成”消息并验证其中的数据。我还验证了记录层的HMAC。然后我从服务器发送“更改密码规范”和“完成”。到目前为止,一切似乎都很顺利。

然后,我从浏览器中收到了以开头的消息(23 3 1 61…) <代码>23表示它是一个应用程序数据<代码>#(3)表示TLS 1.2#(161)表示长度为256 61=317,这是正确的,因为留下的数据实际上是317字节长。我的问题来了:我使用“客户机写入密钥”用RC4解密了这317个字节,然后得到了类似#(148 104 81 182 67 111 28 201 202 50 207 57 126 209 19…)的数据 无法转换为文本。我想我应该得到类似于get/HTTP/1.1的东西。我错了什么?

谢谢


共有1个答案

赫连智
2023-03-14

RC4是一种流密码,根据RFC 5246第6.2节。3.1,“对于不使用同步向量(如RC4)的流密码,一条记录末尾的流密码状态仅用于后续数据包。”

因此,您解密的第一条记录是FINISHED消息,您解密的第一个应用程序数据应该是RC4状态,因为它是在解密FINISHED消息后留下的。

 类似资料:
  • 我正在用SecKeyEncryptedData在ojb-c中加密,并试图用javax.cipher在Java中解密,但遇到了一个问题。 我最近开始做长块,需要使用对称加密,使用AES密钥加密,使用非对称密钥对加密。我解码有问题。 obj-c:java: 解码显然失败了。 所以我的问题分为两个部分。 null

  • 问题内容: 我正在连接一个旧的Java应用程序(无法更改该应用程序),该应用程序正在使用AES加密数据。这是原始Java代码如何实例化AES密码: 我是C / C ++开发人员,而不是Java,但是从我可以看出来的传统Java代码中,既没有指定模式,也没有指定初始化向量。有人偶然知道默认情况下将使用什么Java,因为未指定它? 我们需要新的C / C ++应用程序来解密Java加密的数据。但是我不

  • 我需要用'rijndael-128-cbc'算法解密php加密的数据。 现在我有一个将php代码转换为ruby代码的问题。ruby OpenSSL::Cipher不支持rijndael-128-cbc,所以我使用“aes-128-cbc”。我听说AES是基于Rijndael密码的,所以我想我可以用Rijndael-128-cbc将解密转换为AES-128-cbc。 它的产量是16 然而,在php中

  • 我正在尝试用两个不同的服务提供商解密加密的数据。 我使用的加密算法是:AES/CTR/PKCS5Padding(AESCounter Mode with PKCS5Padding) 在从另一端进行加密的同时,他们使用SunJCE作为使用Python的服务提供者。 我正在尝试使用JAVA中的Bouncy Castle作为提供程序来解密加密的数据(来自python)。 我使用了相同的密钥和用于加密的I

  • 问题内容: 我目前是一名学生,并且正在学习PHP,我正在尝试对PHP中的数据进行简单的加密/解密。我进行了一些在线研究,其中一些非常令人困惑(至少对我而言)。 这是我想做的事情: 我有一个包含这些字段 (用户ID,Fname,Lname,Email,Password)的表 我要拥有的是先将所有字段加密,然后再解密(如果没有任何加密算法,是否可以用于加密/解密) 我想学习的另一件事是如何创建一种与优

  • 我有一个由以下字段组成的表(UserID、Fname、Lname、Email、Password) 我想要的是加密所有字段,然后解密(如果没有任何加密算法,是否可以使用进行加密/解密) 我想学的另一件事是如何创建一个单向的并结合一个好的“salt”。(基本上我只想有一个加密/解密的简单实现,先生/女士,您的回答将会有很大的帮助,非常感谢。谢谢++