【问题标题】:Ruby OpenSSL AES-128-CTRRuby OpenSSL AES-128-CTR
【发布时间】:2015-05-01 14:34:28
【问题描述】:

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

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

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?

【问题讨论】:

    标签: ruby openssl cryptography aes


    【解决方案1】:

    不,你没有错过一些小的东西,你错过了一些巨大的东西。

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

    IV(或 CTR 中的随机数)通常是密文的前缀。对于字节数可能少于 16 的 CTR - 尽管这仍然是最可能尝试的大小。

    【讨论】:

    • 在这种情况下,我认为它非常很可能。我的意思是 iv=16 字节的平均汉明距离是 2.632954。
    猜你喜欢
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2017-03-17
    • 2017-08-08
    • 2019-08-17
    • 2020-04-15
    • 2020-09-26
    • 2017-12-26
    相关资源
    最近更新 更多