如何从加密字符串中提取加密方法生成的IV向量

2023-12-20

我在提取使用 生成的 IV 时遇到问题encrypt方法来自encrypted_strings我提供的特定密码库。从文档中,我看到此方法使用 C 库根据密码生成密钥和 iv,该 C 库调用与 openssl 相同的方法来生成密钥和 iv:EVP_BytesToKey。

我想做的是能够打印我指定的任何密码的 IV,这样我就可以将加密移植到另一种语言。

你能想到有什么方法可以从密码中提取/打印这个 IV 向量吗?

这些是该库使用的算法、模式和填充的详细信息:

  • 算法:DES-EDE3
  • 模式:CBC
  • 填充:PKCS5

下面的 ruby​​ 脚本打印出加密消息,但不知道使用了哪个 iv。

#!/usr/bin/ruby
require 'encrypted_strings'

data = 'Whackabad'
password = 'bAJLyifeUJUBFWdHzVbykfDmPHtLKLMzViHW9aHGmyTLD8hGYZ'

encrypted_data = data.encrypt(:symmetric, :password => password)
printf "Data: #{data}\n"
printf "Encrypted Data: #{encrypted_data}"

我尝试使用openssl因为它允许我打印使用生成的 iv 和密钥-p选项,但它使用PKCS7填充而不是PKCS5。因此,如果我运行下面的命令,不会打印与上面的 ruby​​ 代码相同的加密字符串。

echo -n 'Whackabad' | openssl enc -des-ede3-cbc -nosalt -a -k bAJLyifeUJUBFWdHzVbykfDmPHtLKLMzViHW9aHGmyTLD8hGYZ

笔记: -a:base64 编码,-k:密码,echo -n:从字符串中删除新行,使其与字符串中 ruby​​ 的大小完全相同。

如果我添加-nopad选项,我不知道如何填充输出以获得完全相同的加密结果。

任何帮助将非常感激


PKCS7 填充与 PKCS5 基本相同。在命令行上得到不同结果的原因是它仅使用单个哈希迭代,其中使用的函数encrypted_strings 默认迭代 2048 次 http://ruby-doc.org/stdlib-2.4.0/libdoc/openssl/rdoc/OpenSSL/Cipher.html#method-i-pkcs5_keyivgen.

使用的函数,EVP_BytesToKeyOpenSSL wiki 中描述了 https://wiki.openssl.org/index.php/Manual:EVP_BytesToKey(3),其中包括算法的详细信息。在 Ruby 中复制它可能看起来像这样(使用 MD5 和 2048 迭代):

def hash(d, count)
  count.times do
    d = OpenSSL::Digest.digest('md5', d)
  end
  d
end

password = 'bAJLyifeUJUBFWdHzVbykfDmPHtLKLMzViHW9aHGmyTLD8hGYZ'

bytes = ''
last = ''

# For des-ede3-cbc, 24 byte key + 8 byte IV = 32 bytes.
while bytes.length < 32
  last = hash(last + password, 2048)
  bytes << last
end

key = bytes[0...24]
iv = bytes[24..-1]

您可以使用这些值来解密代码的结果(添加require 'base64' first):

# This is the result of your code:
encrypted_data = "AEsDXVcgh2jsTjlDgh+REg=="

# enrypted_strings produces base64 encoded results, so we decode first
encrypted_data = Base64.decode64(encrypted_data)

cipher = OpenSSL::Cipher.new('des-ede3-cbc')
cipher.decrypt
cipher.key = key
cipher.iv = iv

plain = cipher.update(encrypted_data) + cipher.final

puts plain #=> "Whackabad"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从加密字符串中提取加密方法生成的IV向量 的相关文章

  • Ruby 电子表格 gem,如何居中对齐数字

    我在用着http spreadsheet rubyforge org http spreadsheet rubyforge org生成电子表格 但我遇到了一些问题 我正在打开现有工作簿并向其中添加数据 我已经设法在某种程度上使数字格式正常工
  • 避免在 Ruby 中自动从 Fixnum 转换为 Bignum

    我正在将算法从 C 移植到 Ruby 该算法有一个方法返回一个int有时会溢出 private static int NextRandom int n return 1234567890 n 12345 该算法利用溢出来避免该函数返回的值超
  • 在 C# 中创建我的对称密钥

    一直在审查一些对称加密方法 我看到了很多在类中硬编码私有静态变量的示例 通常类似于 string key THISISYOURENCRYPTIONKEY 然后在更远的地方 代码使用它来加密 解密 抛开正确的实现 算法 策略以及存储它的位置
  • 在 debian Squeeze 上安装 RoR

    有什么方法可以在我的 debian squeeze 上安装 Ruby 1 9 2 或 1 8 7 Rails 3 吗 您可能不想在生产计算机上使用 RVM 它的 PATH 魔力会在不明显的地方 例如 cron 作业 被破坏 然后你就会陷入困
  • Ruby:如何计算相对于另一条路径的路径?

    假设我知道我开始的绝对路径和我试图到达的绝对路径 first first path second second path 现在我想弄清楚如何构建一条相对于第一个路径 例如 answer should be first path second
  • ruby 的 StringIO 类到底是什么?

    我想我明白StringIO有点类似于Java的StringBuffer类 但我不太完全理解 您将如何定义它及其在 Ruby 中的用途 可能的用途 只是希望能够消除我的困惑 no StringIO http ruby doc org stdl
  • 如何以 .pem 格式保存证书中的公钥

    我使用下面的 openssl 命令将我的公钥存储到 pem 文件中 openssl gt x509 in E mycert pem pubkey out E mypubkey pem 但是当我尝试使用此命令时 它将整个证书信息存储在 myp
  • 回形针如何更改基本名称(文件名)?

    我正在尝试更改照片的基本名称 文件名 在我的模型中我有 attr accessor image url basename has attached file image styles gt original gt 300x250 gt pn
  • BigDecimal 无法强制转换为 BigDecimal

    这应该很简单 但它却爆炸了 有任何想法吗 d BigDecimal new 2 0 YAML load a gt d to yaml TypeError BigDecimal can t be coerced into BigDecimal
  • 如何让 Sinatra 通过 HTTPS/SSL 工作?

    正如标题所示 谷歌没有提供任何与此相关的有用信息 如何为 Sinatra 应用程序设置和配置 HTTPS SSL 如何创建 HTTPS 路由 我以前从未在我的应用程序中使用过 HTTPS 也没有调整 Rack 其他内容的经验 所以我很欣赏详
  • Ruby on Rails 最酷的功能是什么,为什么选择它? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我问这个问题之前 我浏览了 SO 上 Ruby on Rails 的搜索结果 找不到太多 但以下 在此页面上找到 https stackove
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • python 和 android 中通过 AES 算法加密和解密

    我有用于 AES 加密的 python 和 android 代码 当我在android中加密文本时 它在python上成功解密 但无法在android端解密 有人有想法吗 Python代码 import base64 import hash
  • 计算 RSA 128 位密钥长度需要多长时间? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在网上做了一些研究 似乎表明 RSA 加密的推荐密钥长度是 1024 位 但是我有一个问题 对于今天使用的普通计算机来说 计算 128 位 RSA
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • .png 和 .jpg 文件解密

    我正在尝试修改我正在使用的软件的图形资产 出于审美目的 我想很难对图形资产做一些有害的事情 但开发人员对它们进行了加密 我不确定他为什么决定这样做 因为我使用和修改了一堆类似的软件 而这些软件的开发人员并没有打扰 因为我看不出为什么需要加密
  • ||= 是什么意思? [复制]

    这个问题在这里已经有答案了 我的应用程序控制器中有一个受保护的方法 def current user current user User find by id session user id end 我想知道什么 方法 我一直在努力寻找和找
  • Ruby 的字符串并置功能的官方文档在哪里?

    我最近意识到 如果你并置一系列 Ruby 字符串文字 例如 a b c 它相当于这些字符串文字的串联 但是 我在任何地方都找不到这种语言功能的记录 我使用术语 并置 和 串联 进行搜索 但只在几个 StackOverflow 响应中找到了对
  • 有没有可以在 HTML 文档之间进行比较的 ruby​​ gem?

    事实证明 对两个不同的 html 文档进行比较是一个完全不同的问题 而不仅仅是对纯文本进行比较 例如 如果我在以下之间进行简单的 LCS 差异 Google and Google diff 结果不是 but a gt github com
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj

随机推荐

  • 执行“npm install”后安装了太多 npm 模块

    My package json name thumbnaillist gulp version 1 0 0 description main index js scripts test echo Error no test specifie
  • 其实例类型“BrowserRouter”不是有效的 JSX 元素

    我正在开发一个用 React coreui 开发的项目 该项目一直运行良好 然而 上周我在部署修改时遇到了一个莫名其妙的问题 18 03 11 Creating an optimized production build 18 04 32
  • IOS模拟器中双击不工作

    我在尝试着double tapIOS模拟器中的一个元素使用appium但无法这样做 Methods tried action tap x xx y yy count 1 release perform 连续2次 但似乎有2秒的间隙 这在现实
  • r - tag$head 中的错误:“closure”类型的对象不可取子集

    当我在笔记本电脑上运行 Shiny 应用程序时 出现此错误 在我使用库 git2r 添加一行代码之前 应用程序就可以工作了 下面是我的代码 有人可以帮忙吗 谢谢 ui R league desc lt c Premier League Se
  • Unity 2019.3.0a7:Microsoft Visual C# 编译器错误

    我已升级到最新的 Unity 版本 Unity 2019 3 0a7 但在不同的文件中却遇到了大量错误 与我合作的朋友也运行相同的版本 但没有出现错误 其中有两个 每个引用不同的包 但都引用每个包内的多个错误 错误大致如下 R Visual
  • 添加验证到 Angular 材质禁用字段

    简化的场景是在我的表单上有两个字段 A 和 B 字段 A 是必需的并且已启用 字段 B 也是必需的 但被禁用 并且仅作为字段 A 中键入的数据的结果而填充 动态 并且在某些情况下 B 可能会解析为 NULL 除非两个字段都已填充 否则用户应
  • 在url中使用下划线连接组合键是好还是坏设计?

    我正在为以下用例寻找 RESTful API 设计的最佳实践 Table1 Table2 Id1 Id1 Id2 Id2 Id3 Id3 Name Name Table1Id1 FK to Table1 Table1Id1 FK to Ta
  • 使用 pandas reindex 和 float:插值

    你能解释一下这种奇怪的行为吗 df pd DataFrame year 1986 1987 1988 bomb arange 3 set index year In 9 df reindex arange 1986 1988 125 125
  • 在mongo查询中将iso日期转换为时间戳

    这是查询 project formattedDate dateToString format Y m d date ceatedAt createdAtMonth month ceatedAt rating 1 group id forma
  • Nodejs无法连接到云shell上的mongodb

    我的 MongoDB 服务器托管在 google cloud VM 上 我希望创建 App Engine 微服务 测试连接性 我的 server js 看起来像 const MongoClient require mongodb Mongo
  • 如何使用 Spark 查找 10 亿条记录的最近邻居?

    给定 10 亿条记录 其中包含以下信息 ID x1 x2 x3 x100 1 0 1 0 12 1 3 2 00 2 1 1 2 2 3 对于上面的每个 ID 我想根据向量的欧几里德距离 x1 x2 x100 找到前 10 个最接近的 ID
  • 在 JavaScript 中重复某个字符串多次

    在 Perl 中 我可以使用以下语法多次重复一个字符 a a x 10 results in aaaaaaaaaa 有没有一种简单的方法可以在 Javascript 中实现这一点 显然我可以使用一个函数 但我想知道是否有任何内置方法或其他一
  • 自动输入 Python 提示

    我正在尝试编写一个 python 脚本 它将为我执行 bash 命令行程序 该程序要求用户输入两次 我希望我的脚本每次都自动输入 1 我听说过这样的事情 os system program lt prepared input 如何编写pre
  • q-learning计算中的大量状态

    我通过 q learning 实现了一款 3x3 OX 游戏 它在 AI vs AI 和 AI vs Human 中完美运行 但我无法更进一步地进行 4x4 OX 游戏 因为它会耗尽我所有的 PC 内存并崩溃 这是我当前的问题 大数组中的访
  • 根据优先级映射数据框列

    我有一个主数据框 main df 例如 A B X Y Id1 0 cat cat1 catabc 0 1 uuid01 1 cat cat1 catxyz 0 4 uuid02 2 cat cat2 catpqr 0 5 uuid01 3
  • Javascript - 按日期然后按时间对对象数组进行排序

    我有以下数组 id 1 value value1 date 2018 08 08 time 15 27 17 id 2 value value2 date 2018 08 09 time 12 27 17 id 3 value value3
  • 在 R 中创建水平条形图以显示活动序列

    数据集 患者 是患者访问诊所并接受治疗的事件日志 下面的脚本提供了一个数据帧 其中包含事件日志中的跟踪或活动序列 trace id 以及特定跟踪之后的案例的绝对频率 我希望使用创建动态水平条形图ggplot2 or plotly这样 迹线的
  • JPA和独特的领域

    我的应用程序中有两个持久性对象 事物和附加到事物的标签 该应用程序可以生成带有附加标签的事物集合 标签对象具有唯一的名称 使用相同标签两次标记某物是没有意义的 插入事物 附加标签对象 时 其中一些具有相同名称的标签对象可能已存在于数据库中
  • 是否可以声明具有无限上限的 Ada 范围?

    我想在 Ada 中声明记录类型的速度范围 下面的方法行不通 但是有没有办法让它工作呢 Speed in knots range 0 to unlimited Speed float Range 0 0 unlimited 我只想要这个数字的
  • 如何从加密字符串中提取加密方法生成的IV向量

    我在提取使用 生成的 IV 时遇到问题encrypt方法来自encrypted strings我提供的特定密码库 从文档中 我看到此方法使用 C 库根据密码生成密钥和 iv 该 C 库调用与 openssl 相同的方法来生成密钥和 iv E