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

Ruby OpenSSL AES-128-CTR

益富
2023-03-14

我不知道我做错了什么,在这里试图用给定的密钥解密一串十六进制值,使用ruby的OpenSSL密码AES-128-CTR。

我正在使用gem hex_字符串将我的十六进制转换为字节

ctrkey = "36f18357be4dbd77f050515c73fcf9f2"
ciphertext3 = "69dda8455c7dd4254bf353b773304eec0ec7702330098ce7f7520d1cbbb20fc3\
88d1b0adb5054dbd7370849dbf0b88d393f252e764f1f5f7ad97ef79d59ce29f5f51eeca32eabedd9afa9329"

cipher2 = OpenSSL::Cipher.new('AES-128-CTR')
cipher2.decrypt

ctrkey = ctrkey.to_byte_string
cipher2.key = ctrkey

iv = cipher2.random_iv
cipher2.iv = iv

ciphertext3 = ciphertext3.to_byte_string
plain = cipher2.update(ciphertext3) + cipher2.final

puts "plaintext of Q3: #{plain}"

我知道我遗漏了一些小东西,因为我有类似的代码实现AES-128-CBC。我是否需要一个计数器,为密文中128字节的每一块递增IV?

共有1个答案

陶福
2023-03-14

不,你没有错过小东西,你错过了大东西。

您正在生成一个新的IV,而不是使用与加密相同的IV。对于CTR,如果IV是随机的,则每个计数器值都不同,从而产生随机输出。

通常IV(或在CTR的情况下nonce)是前缀的密文。对于CTR,它可能小于16字节——尽管这仍然是最有可能尝试的大小。

 类似资料:
  • 问题内容: 由于不建议使用Mcrypt,因此我想在代码中使用OpenSSL,因为我们已经在服务器中使用 php 7.0.17 ,并且不知道何时升级。 一些第三方API(可能在 PHP 5.x 上托管并使用 mcrypt )正在获取加密数据。他们提供了用于加密/解密字符串的方法。 他们在这 如果已加密,则使用这些方法字符串 我们想在我们这边使用,如果我们使用OpenSSL加密相同的字符串,则它必须提

  • 我用Delphi加密“sifrelenecek”字符串,使用AES 128 ECB,使用密钥为“KRPTTT101103”,它给了我“FBE4A4405D6C1B54503D9B213E41AE56”,我正在检查http://aes.online-domain-tools.com/,它是正确的。我试图使用此功能创建相同的PHP加密; 但是php给我的结果是“wL2yf 72thixicjw0duQ

  • 由于Mcrypt已被弃用,我想在我的代码中使用OpenSSL,因为我们已经在服务器中使用了php7.0.17,并且不知道他们何时升级它。 一些第三方API(可能托管在PHP 5.x上并使用mcrypt)正在获取加密数据。他们提供了用于加密/解密字符串的方法。 他们在这里 使用这些方法string<code>small1</code>如果加密,则变为<code>v7IXp5vVaFVXlt/MN8B

  • 我用java编写了这段代码,以便解密密文。我有钥匙。对我来说,一切都是正确的,但我有我要解释的问题。 这是我的代码: 我收到以下错误: 出了什么问题?我知道这个问题在某种程度上与衬垫有关,但我不知道确切的解决方案。我只有一个密文IV和密钥。

  • Ruby代码是 然后 现在PHP代码是 然后我得到 密文和ruby的不一样。现在我尝试用PHP制作的密文解密ruby。 Ruby 'AES-128-CBC '和PHP 'rijndael-128 '加密有区别吗?还有我怎么用ruby解密?

  • 我只需要通过代码加密AES CBC 128位模式的字符串。我使用openssl库完成了这项工作,但无法获得正确的输出。 到目前为止,我已经完成了。 我的十六进制输出是:B0 15 751B50 80 D4 FF 81 68 146BB71B95 99 37 38 但正确的输出是:< code > 73 5C 04 F9 57 18 43 7C EE 68 27 59 2B 41 A8 DA (通过