红宝石包并打开包装.这种十六进制的转换是如何进行的?可以使用一些帮助



我遇到了一些麻烦理解某些代码:

我理解的事情:1.使用Cipher类和对象以及加密方法。2.地址_STRING及其如何使用|作为定界符。3.更新。

我的问题:1. cipher.final在做什么?2.拆卸是什么?

  cipher = OpenSSL::Cipher::Cipher.new('AES-256-CFB').encrypt
  iv = cipher.random_iv
  cipher.key = Digest::SHA256.digest(KEY)
  address_string = addresses.map{ |addr| addr.strip }.push(identifier).join('|')
  encrypted_message = cipher.update(address_string) + cipher.final
  binding.pry
  encrypted_message.unpack('H*')[0]

我在我的终端中看到了这一点:

 encrypted_message
=> ".YIxCAxACx17xF2xBFx1C^bx8C[|xB8YUx1FxCBn/xE5xA0x15x8AaefxAF>x7Fx8A"
[2] pry(Mixer)> encrypted_message.unpack('H*')
=> ["2e5949caac17f2bf1c5e628c5b7cb859551fcb6e2fe5a0158a611b66af3e7f8a"]

我了解二进制和十六进制的基础知识...但是我仍然很难理解自己看到的东西。

  1. 什么是加密消息格式?什么是斜线和x s。是十六进制吗?你怎么知道?.YI领先部分是什么?

  2. 他们如何将其转换为Hexa?您可以举个例子吗?

encrypted_message是一个从字符.YI开始的字符串。让我们将这些字符转换为十六进制,然后使用ASCII表进行二进制:

ASCII  .        |Y        |I
Hex    2    e   |5    9   |4    9
Binary 0010 1110|0101 1001|0100 1001

请注意,十六进制是您在unpack(H*)结果开始时看到的。如果要调用encrypted_message.unpack("B*")(位字符串(,则同样会看到它以

开头
001011100101100101001001

重点是

  1. no "加密消息格式"。encrypted_message是毫无意义的,无结构的二进制数据。
  2. 当您致电unpack时,您是在说"获取此毫无意义的二进制数据,并以不同的表示向我展示。"在这种情况下,十六进制数字。就像我上面一样,您可以将其视为二进制。或者,您可以将其视为ASCII字符(默认值(,其中x指示没有ASCII表示的字节。所有相同的二进制数据仅以不同的人为可读的方式呈现。

相关内容

最新更新