OpenSSL 和 CryptoJS SHA256 加密转换

2024-04-26

我的问题是 OpenSSL 的新版本与 CryptoJS 的默认设置不兼容。

openssl enc 用于基于密码的密钥派生的默认哈希值 1.1.0 中更改为 SHA256,而较低版本中更改为 MD5。https://unix.stackexchange.com/questions/344150/why-can-one-box-decrypt-a-file-with-openssl-but-another-one-cant/344586#344586 https://unix.stackexchange.com/questions/344150/why-can-one-box-decrypt-a-file-with-openssl-but-another-one-cant/344586#344586

默认情况下,CryptoJS https://code.google.com/archive/p/crypto-js/使用 MD5 进行密钥派生。 OpenSSL 使用 MD5,但现在在 OpenSSL 版本 >=1.1.0 中,它使用 SHA256。

所以如果我通过了-md md5CryptoJS 与 OpenSSL 兼容:

echo "Hello World" | openssl enc -aes-256-cbc -md md5 -pass pass:"Secret Passphrase" -e -base64

output: U2FsdGVkX19aufvaqQQ89scaApBos6oFCyqPj7IKUFk=

加密JS:

CryptoJS.AES.decrypt('U2FsdGVkX19aufvaqQQ89scaApBos6oFCyqPj7IKUFk=', 'Secret Passphrase').toString(CryptoJS.enc.Utf8);

output: "Hello World"


但现在如果我想使用 SHA256 而不是 MD5(删除-md md5):

echo "Hello World" | openssl enc -aes-256-cbc -pass pass:"Secret Passphrase" -e -base64

output: U2FsdGVkX1/5LLkFkTpawh1im4a/fCco5hS42cjn/fg=

加密JS:

CryptoJS.AES.decrypt('U2FsdGVkX1/5LLkFkTpawh1im4a/fCco5hS42cjn/fg=', 'Secret Passphrase').toString(CryptoJS.enc.Utf8);

输出:空

我如何告诉 CryptoJS 使用 SHA256 而不是 MD5 来进行密钥派生?


CryptoJS“按原样”似乎不提供这种灵活性。这是因为 MD5 的使用被硬编码到用于从密码短语派生密钥的函数中。你可以看到它正在发生在 OpenSSLKdf 中 https://github.com/brix/crypto-js/blob/3.1.9/cipher-core.js#L780:

var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);

KDF 代表密钥派生函数,创建时不提供摘要。那EvpKDF.create()其本身确实有可能进行不同类型的摘要,正如您可以在它的配置选项 https://github.com/brix/crypto-js/blob/3.1.9/evpkdf.js#L37:

        cfg: Base.extend({
            keySize: 128/32,
            hasher: MD5,
            iterations: 1
        }),

它还表明 MD5 是默认值。

所有这些都意味着如果您将第一行修改为以下内容,解密将起作用:

var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: C_algo.SHA256 }).compute(password, salt);

事实上,在编辑(作为测试)该文件之后cipher-core.js在本地安装的模块中,最后一行代码确实会产生所需的结果Hello World.

我认为在不修改 CryptoJS 模块本身的情况下重现此问题的唯一方法是将模块中的整个代码块复制到您自己的代码中。

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

OpenSSL 和 CryptoJS SHA256 加密转换 的相关文章

  • Java - 使用数组中的值的replace()方法正在更改数组值?

    我正在做类似的事情 public static String list a b c d It gives me a NullPointeException if I didn t use static public String encry
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • JSEncrypt 在后端解密(Bash)

    看起来 JSEncrypt 在 RSA 加密字符串中添加了一些随机填充 因此我无法使用 OpenSSL 对其进行解密 我的 JS 代码如下所示 const rsaEncrypt new window JSEncrypt rsaEncrypt
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 JNDI 和 Digest-MD5 对 LDAP 进行身份验证

    我正在尝试使用 DIGEST MD5 加密对 LDAP 服务器进行身份验证 使用简单加密时 它工作得很好 但由于显而易见的原因 我无法通过网络以纯文本形式发送密码 奇怪的是 在使用 Softerra LDAP 浏览器时 我可以使用 Dige
  • Delphi AES 库 (Rijndael) 使用 KAT Vectors 进行测试

    对于这两个库 Delphi 加密概要 v 5 2 http code google com p delphidec TurboPower 密码箱 v 2 07 http lockbox seanbdurkin id au tiki list
  • 在 iOS 上使用 RNCryptor 异步解密大文件

    我需要在 iOS 上使用 RNCryptor 异步解密一个大文件 以便显示进度条 我在任何地方都找不到示例 因此尝试了我猜对的方法 但是 我想出的方法不起作用 解密器的处理程序从未被调用 并且线程在发送所有数据后因 EXC BAD ADDR
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的

随机推荐

  • 每当我尝试使用 Next.js 运行“npm run dev”时,都找不到错误模块

    每当我跑步时npm run dev我收到这个错误 我尝试过删除node modules并使用重新安装它npm install但这没有用 然后我尝试删除两者node modules and package lock json并重新安装它们 这
  • nix 构建守护进程是否保留构建日志?

    有时候跑步的时候nix build and nixos rebuild我发现了易于修复的问题 例如已弃用的警告或冗余导入 并且我认为 有趣 我也许能够在空闲时间解决这个问题 我知道我可以将构建日志重定向到一个文件 但我总是忘记这样做 直到再
  • 如何熟悉代码签名问题?

    每次当我处理代码签名和配置文件时 都会发生奇怪的事情 大多数时候我会收到错误 找不到代码签名身份 如果没有 则会出现 找不到匹配的配置文件 和 没有具有有效签名身份的配置文件 之类的错误 尽管我非常熟悉代码签名和配置背后的理论和事物 但我每
  • 结构体的指针运算

    给定一个包含 1 个 double 和 3 个 int 变量 总共 4 个变量 的结构体定义 如果 p 是指向该结构体的指针 其值为 0x1000 那么 p 的值为多少 这不是作业问题 所以不用担心 我只是想准备考试 但我无法解决这个练习题
  • 使用蓝牙调用应用程序

    我们可以使用蓝牙从一个 Android 设备中调用另一台 Android 设备中的应用程序吗 如果可以的话流程是什么 不 您不能从一个 Android 设备调用另一个应用程序 除非两个应用程序都使用蓝牙权限并进行配置
  • 检测文本中哪个单词被点击

    我正在构建一个 JS 脚本 该脚本在某个时刻能够在给定页面上允许用户单击任何单词并将该单词存储在变量中 我有一个非常丑陋的解决方案 并且涉及使用 jQuery 进行类解析 我首先解析整个 html 将所有内容拆分到每个空间上 并重新附加包含
  • 在 Reshape Cast() 中使用来自 Shiny Widget 的输入

    我试图在我闪亮的网络应用程序中创建一种数据透视表 用户可以在其中选择他们想要相互转换的变量 我发现的问题是 当我尝试将强制转换与 输入 列 一起使用时 我得到以下信息 错误 强制转换公式包含在熔融数据中找不到的变量 输入 列 input c
  • 如何提高 PySerial 读取速度

    我目前正在构建一台使用 Arduino Mega2560 作为主控制器的机器 Arduino 通过串口连接 获取命令 执行它并每 1ms 吐出一堆测量数据 我有一个运行 Python 的 Raspberry Pi 为用户提供一个漂亮的 GU
  • eclipse中Tomcat服务器发布问题

    当我尝试启动服务器时 出现以下异常 Could not publish to the server java lang IndexOutOfBoundsException 技术 JSF 2 Primefaces 3 5 Tomcat 7 J
  • Chrome webNavigation.onComplete 不起作用?

    我正在尝试编写一个 chrome 扩展 当用户位于包含视频的 YouTube 页面时执行一些代码 据我所知 我的代码是正确的 但它不起作用 事件页面 js chrome webNavigation onCompleted addListen
  • Python:当键盘中断被转发到多处理子进程时?

    我在 Windows 上执行了以下测试代码 import multiprocessing import time def child while True time sleep 2 if name main multiprocessing
  • Meteor 公共文件夹不工作

    我是 Meteor 的新手 我试图了解如何提供静态内容 图像 JS 等 我按照文档创建了正确的文件夹结构 它并没有真正涉及 但使对此内容的请求只是故障转移到服务主应用程序页面 例如 将图像放入 app root public image p
  • 从子模块隐式导入

    我有一个这样的包 foo init py bar py baz py 我希望在导入时自动使用子模块的功能foo So if bar py has def spam 在某个地方 我希望能够直接调用它 就像foo spam 实现这一目标的最佳方
  • 疑难解答“WSGIRequest”对象没有属性“用户”?

    我正在尝试使用 login required装饰者但我得到了 WSGIRequest object has no attribute user 属性错误 我有进口声明from django contrib auth decorators i
  • MathJax:隐藏Mathjax加载过程

    I have Mathjax在我显示的代码中UIWebView 尽管Mathjax正在加载它在我的左下角显示加载过程UIWebView与下面的图片相同 我想隐藏它们 我不希望我的用户看到它们 note 虚拟解决方案显示假 正在加载 几秒钟
  • type="range" HTML 输入的刻度

    看完之后this http css tricks com datalists different input types 我想知道是否可以在 Chrome 和 Firefox 中显示刻度type range 输入号码 我能找到的关于这个主题
  • 使用 keras 和多个序列进行时间序列预测

    我明白了有状态 LSTM 预测示例 https github com fchollet keras blob master examples stateful lstm py在 Keras 中的单个序列上 该示例有一个包含 50k 个观察值
  • mysql_real_escape_string 未定义

    我正在使用 PHP 版本 5 3 并尝试使用mysql real escape string unescaped string 在我的代码中 但出现错误 Fatal error Call to undefined function mysq
  • 查询字符串:查询字符串是否可以包含也包含查询字符串的 URL?

    Example http foo com generatepdf aspx u http foo com somepage aspx color blue size 15 我添加了 iis 标签 因为我猜它也取决于您使用的服务器技术 服务器
  • OpenSSL 和 CryptoJS SHA256 加密转换

    我的问题是 OpenSSL 的新版本与 CryptoJS 的默认设置不兼容 openssl enc 用于基于密码的密钥派生的默认哈希值 1 1 0 中更改为 SHA256 而较低版本中更改为 MD5 https unix stackexch