使用 SJCL 在 Javascript 中加密并在 PHP 中解密

2024-03-10

我想用 Javascript 加密一些数据,并将其发送到 php 服务器后可以解密。

我计划使用 JS 加密库作为 SJCL :http://crypto.stanford.edu/sjcl/ http://crypto.stanford.edu/sjcl/。到目前为止,我可以在 JS 中加密我的数据并通过 ajax post 发送。 我的JS代码看起来像这样。

sjcl.encrypt('a_key','secured_message');

我的问题是如何在 php.ini 中解密我的数据。如果可能的话请告诉我如何使用示例代码来做到这一点。 (注意:SSL 不是我的选择,现在我计划使用 KEY 作为每个请求生成的随机数)

Thanks


PHP 7.1.0 终于添加了 openssl 对 iv 和 aad 参数的支持BUT它错误地强制执行 12 字节 iv 长度。

在您的示例中,我们加密如下:

var sjcl = require('./sjcl');
console.log(sjcl.encrypt('a_key', 'secured_message', { mode: 'ccm', iv: sjcl.random.randomWords(3, 0) }));

To get:

{"iv":"YAKkgmNCcVawQtiB","v":1,"iter":10000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"CwEDE4PXBzY=","ct":"pJ7nmnAGXiC9AD29OADlpFdFl0d/MxQ="}

所以,给定:

$password = 'a_key';
$input = json_decode('{"iv":"YAKkgmNCcVawQtiB","v":1,"iter":10000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"CwEDE4PXBzY=","ct":"pJ7nmnAGXiC9AD29OADlpFdFl0d/MxQ="}', true);

我们可以在 PHP 7.1.0 中解密如下:

$digest   = hash_pbkdf2('sha256', $password, base64_decode($input['salt']), $input['iter'], 0, true);
$cipher   = $input['cipher'] . '-' . $input['ks'] . '-' . $input['mode'];
$ct       = substr(base64_decode($input['ct']), 0, - $input['ts'] / 8);
$tag      = substr(base64_decode($input['ct']), - $input['ts'] / 8);
$iv       = base64_decode($input['iv']);
$adata    = $input['adata'];

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

使用 SJCL 在 Javascript 中加密并在 PHP 中解密 的相关文章

随机推荐

  • 如何防止特定模板的隐式模板实例化?

    我想阻止特定模板类的所有隐式模板实例化 以防止它被实例化到每个翻译单元中 看来我的选择是 Use fno 隐式模板在 gcc 的命令行上 这 抑制所有隐式模板实例化 这不是我想要的 我只想防止单个模板出现这种情况 使用C 11 外部模板 但
  • Angular 2 组件中重复的“id”属性

    Context 我正在为复选框编写一个自定义 Angular 组件 该组件呈现复选框标记和标签标记 复选框的 id 属性和标签的 for 属性都设置为组件的id财产 一个 Input到组件 以确保单击标签将切换复选框 该模板的简化版本如下所
  • 如何将 XTickLabel 重置为默认值

    在 R2010b 中 我可以通过图形编辑器将刻度标签重置为自动 但我想以编程方式将它们重置为默认值 I tried set gca XTickLabel auto 但它在每个刻度处显示 自动 有什么提示吗 你需要设置XTickLabelMo
  • 如何删除 CreateUserWizard 控件中的表标签

    如何使用 CreateUserWizard 控件而不让它呈现 html 表 我已经自定义了 CreateUserWizard 的布局 并使用 css 对其进行样式设置 由于以下原因 我的按钮距离表单太远 table 默认情况下 asp ne
  • 哪里可以下载 Eclipse 3.6 (Helios) 的 GlassFish 插件

    您能帮我下载 Eclipse 3 6 Helios 的 GlassFish 插件吗 我试过 https ajax dev java net eclipse https ajax dev java net eclipse Eclipse 中新
  • 为什么每次运行调用 Foo::getInstance() 的脚本时 PHP 都会创建一个新的单例实例?

    我怀疑 PHP 单例不是真正的单例 所以我做了一个测试 我创建了以下课程 class MySingleton private static instance private function construct error log I am
  • 将变量值从 main.py 传递到 .kv 文件

    我正在尝试获取名为的变量的值h从 main py 文件到我的 kv文件 但我得到的只是一个空白屏幕 这是我的main py class ExampleApp App def build self h SoME STRING IS HERE
  • struts2中如何调用一个action中定义的不同方法?

    我不熟悉struts2 但我知道在按名称调用操作期间 Action 中默认调用方法execute 但是如何调用同一个动作类中定义的其他方法呢 在下面的示例中 当我在ajax中设置url链接时 会调用execute 方法 如下所示 saveJ
  • 从列表内的微调器获取值

    我已经使用扩展列表活动的列表适配器创建了android应用程序 在列表中我有旋转器 我如何从列表中的旋转器获取值 告诉一些想法 谢谢进步 尝试这个 Override public void onItemSelected AdapterVie
  • 如何将所有 GitHub 机密放入环境变量中以供操作访问(在我的例子中是 powershell)?

    我读过一些类似的帖子 但似乎没有人回答这个问题 如果我知道秘密的名称 我可以将单个 GitHub 秘密设置到操作中的环境变量中 环境 PW ID0007 秘密 PW ID0007 如何在不知道秘密名称的情况下将所有秘密公开为环境变量 批量或
  • 如何避免在任何时候()“通过引用更新”?

    我想将数字变量转换为POSIXct using anytime 我的问题是anytime
  • 如何使用与 Meteor 具有传递依赖关系的 Node.js 库?

    可以在 Meteor 中使用 node js 包作为此处描述 https stackoverflow com questions 11691513 it possible use a nodejs package inside meteor
  • Grails 依赖注入在服务之外?

    我有一个 Grails 应用程序 需要运行一个可能会随着时间的推移而被替换的策略 我知道 Spring 是 Grails 的基础 所以我想知道我是否可以访问 Spring 的 IoC 容器 以便我可以在 xml 文件中外部化实际依赖项 注意
  • Hibernate @PreUpdate:检查已更改的内容

    问题 如何检查注释的方法内哪些字段已更改 PreUpdate 可选 如果上述问题的答案是 不可能 那么也许还有其他方法可以解决我的问题 I want自动更新modified Tourist每次我们改变它的字段时 除了情况当我们只修改loca
  • Laravel 4 测试; “phpunit”无法识别?

    http four laravel com docs testing http four laravel com docs testing说 安装新的 Laravel 应用程序后 只需运行phpunit在命令行上运行测试 phpunit无法
  • 如何将一个 DialogFragment 提升到另一个之上?

    假设我有几个对话框片段 它们是为了响应可以以任何顺序到达的消息和事件而显示的 通常 最后显示的对话框将位于顶部 有没有办法显示对话框片段under是现有的 还是在显示后更改其 z 顺序 我的应用程序一次显示多个对话框的情况应该很少见 但这种
  • Apache POI 获取字体规格

    我想自动调整 Excel 中的列大小 但又不会花费太多性能 Apache POI 的内置自动调整大小非常慢 在几个小时后没有完成 100 万行 为了节省性能 我只想近似单元格宽度 但为此我需要字体规格 Apache POI 有一个类叫做Fo
  • 如何为 Mac OS 编写互联网帐户插件?

    Mac OS 上有多个邮件 联系人和日历插件 但我需要具有邮件 联系人和日历服务的新型帐户 我不想将此帐户单独添加为邮件帐户 联系人帐户和日历帐户 我用谷歌搜索并没有找到有关这些插件的文档 我只知道它们位于 System Library I
  • 在 Woocommerce MINI CART 中显示小计、税收、总计

    我有一个带有 woocommerce 插件的 WordPress 网站 在 woocommerce 设置中 我在购物车和结帐中显示不含税的价格 因此它显示了小计 税收和总计 但在迷你购物车小部件中 它只显示小计 如何让迷你购物车小部件显示小
  • 使用 SJCL 在 Javascript 中加密并在 PHP 中解密

    我想用 Javascript 加密一些数据 并将其发送到 php 服务器后可以解密 我计划使用 JS 加密库作为 SJCL http crypto stanford edu sjcl http crypto stanford edu sjc