与 Nodejs Express 共享 Laravel 4 会话

2023-12-20

我正在尝试从 NodeJS 上标头的 Cookie 中获取 Laravel 会话 ID。

到目前为止我已经尝试过:

function nodeDecrypt(data, key, iv) {
  var decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
  var chunks = []
  chunks.push(decipher.update(chunk.toString(),'hex','binary'))
  chunks.push(decipher.final('binary'))
  return chunks.join('')
}

var cookie = JSON.parse(new Buffer(req.cookies.gjsess, 'base64'));
var iv     = new Buffer(cookie.iv, 'base64');
var value  = new Buffer(cookie.value, 'base64');

var dec = nodeDecrypt(value, 'YourSecretKey!!!', iv);

但到目前为止我一直在得到Invalid IV length 32.

YourSecretKey!!!是在app.php拉拉维尔 4.


Laravel 加密机制:

protected $cipher = 'rijndael-256';
protected $mode = 'cbc';
protected $block = 32;

...

$payload = $this->getJsonPayload($payload);
$value = base64_decode($payload['value']);
$iv = base64_decode($payload['iv']);
return unserialize($this->stripPadding($this->mcryptDecrypt($value, $iv)));

...

return mcrypt_decrypt($this->cipher, $this->key, $value, $this->mode, $iv);

...

$this->app->bindShared('encrypter', function($app)
{
  return new Encrypter($app['config']['app.key']);
});

其他尝试

var cookie = JSON.parse(new Buffer(req.cookies.gjsess, 'base64'));
var iv     = new Buffer(cookie.iv, 'base64');
var value  = new Buffer(cookie.value, 'base64');

var MCrypt = require('mcrypt').MCrypt;
var desEcb = new MCrypt('rijndael-256', 'cbc');
desEcb.open('YourSecretKey!!!');
var plaintext = desEcb.decrypt(value, 'base64');

这不会给出错误,但仍然得到无用的数据。


终于我也得到了!这是我的解决方案。非常适合我。

// requirements
var PHPUnserialize = require('php-unserialize'); // npm install php-unserialize
var MCrypt = require('mcrypt').MCrypt; // npm install mcrypt


// helper function

function ord( string ) {    // Return ASCII value of character
    // 
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)

    return string.charCodeAt(0);
}


function getSessionIdFromLaravelCookie() {

    var cookie = JSON.parse(new Buffer(req.cookies.laravel_session, 'base64'));
    var iv = new Buffer(cookie.iv, 'base64');
    var value = new Buffer(cookie.value, 'base64');
    var key = "_Encryption Key_";

    var rijCbc = new MCrypt('rijndael-256', 'cbc');
    rijCbc.open(key, iv); // it's very important to pass iv argument!

    var decrypted = rijCbc.decrypt(value).toString();


    var len = decrypted.length - 1;
    var pad = ord(decrypted.charAt(len));

    var sessionId = PHPUnserialize.unserialize(decrypted.substr(0, decrypted.length - pad));

    return sessionId;

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

与 Nodejs Express 共享 Laravel 4 会话 的相关文章

随机推荐

  • Haxe 中的常量

    如何在 Haxe 中创建公共常量 我只需要旧的模拟const in AS3 public class Hello public static const HEY String hey 在 Haxe 中声明常量的常用方法是使用static a
  • 如何在 Go 中执行文字 *int64 ?

    我有一个结构类型 int64 field type SomeType struct SomeField int64 在我的代码中的某个时刻 我想声明这个的文字 比如说 当我知道该值应该是 0 或指向 0 时 你知道我的意思 instance
  • Universal Analytics 和 Facebook 注册

    我有一个允许通过 Facebook 注册的网站 theneeds com 我们正在开展多项活动 例如在 Facebook 本身上 我们希望正确跟踪不同活动的注册情况 问题出在 Universal Analytics 上 当用户注册 Face
  • 更改 Git 历史记录中的电子邮件地址

    我已经在 git 存储库上工作了一段时间并做了一些提交 我一直在我的 php 文件中使用文档块 包括我的私人电子邮件地址 如下所示 Bla bla bla author Nic lt email protected cdn cgi l em
  • 退出世博会

    我必须从我的 React Native 项目中退出 但我仍然想保留他们的库提供的一些功能 例如通知 是否可以 提前致谢 从 开始SDK33博览会改为根据需要单独安装自己的模块 如果您已经安装并使用了notification模块使用expo
  • Flutter,in_app_purchase 非常难以测试

    在查看了有点差劲的 in app purchase pub dev 文档后 在多次分发测试版本后 我成功地将内部测试 url 发送到测试设备进行下载 然而 当我使用真实设备进入 in app purchase 屏幕时 就会出现应用程序终止对
  • 在通用 lambda 捕获中使用 this 指针

    我有一个问题 Clang 3 6 和 G 5 1 有不同的意见 include
  • Linux环境下的C#

    我目前在 Unix 环境中使用 C C 工作 并且是 Linux 环境的新手 我想了解 Linux 操作系统并学习 C 作为我职业生涯的下一个级别的编程语言 我决定在我的笔记本电脑上安装 Ubuntu Linux 但我不确定我们是否可以在L
  • 如何使用JS检测用户与phonegap的触摸

    我正在使用phonegap 来构建Android 应用程序 我想检测用户的触摸事件 以便弹出警报 但是 如何从 javascript 调用 ontouch 事件呢 Thanks 下面是一个示例 显示touchstart and touche
  • kaptGenerateStubsDebugKotlin FAILED e:无法加载模块 <错误模块> - Android Studio 项目

    当我尝试构建项目时出现此错误 我的编译器没有任何错误 源代码 https github com KarolCieslar WyjazdyOSP tree firebase https github com KarolCieslar Wyja
  • .NET 4.5 中 List.Sort 的行为与 .NET 4.0 相比有何变化?

    我在针对 NET 4 0 的项目中进行了以下测试 TestFixture public class Donkey Test public void TestListSorting var expected new MockRepositor
  • 使用 webpack 导入 vis.js

    我想进口only DataSet and Network from vis js在我们的 Webpack 应用程序中使用 ES6 模块 一种简单的方法就是导入dist vis network min js但它已经缩小了 所以与我们的 web
  • JavaScript解析字符串和对象的引用[重复]

    这个问题在这里已经有答案了 是否可以通过对象本身获取对象的引用 obj 以及字符串形式的属性 地址 城镇 街道 所以最后它解决了 obj 地址 城镇 街道 我可以想象 eval 函数 Try function getValue obj pa
  • Echo 将我的制表符更改为空格

    我将来自网络的以下结构作为如何在 BASH 中读取文件的基本示例 cat inputfile txt while read line do echo line done 不过 我的 inputfile txt 是制表符分隔的 并且上述命令中
  • 何时索引、在 Mongoid 中索引什么?

    我对索引有点陌生 但我对索引的用例很好奇 我认为它使对索引字段的查询速度更快 是否有确定索引内容和何时索引的标准 我应该期望获得什么样的性能优势 特别是在 Rails 应用程序上将 Mongoid 与 MongoDb 结合使用 查看Inde
  • 如何停止 goroutine [重复]

    这个问题在这里已经有答案了 我有一个调用函数的 goroutine 并且有一个特殊参数 我想启动或停止这个 goroutine 我的问题是这段代码永远不会停止我的 goroutine 它每次都会创建一个新作业 quit make chan
  • TextView Marquee 不起作用[重复]

    这个问题在这里已经有答案了 我尝试过使用选框但不起作用 这是我的代码 请让我知道哪里出了问题
  • 单击标记时,Google 地图 v3 打开最后一个信息窗口

    我有一个共享的infoWindow对于我所有的标记 如果我使用 jquery 的话效果很好 each function 但是如果我将其更改为 JavaScrips 的本机 for 或 while 循环 则它不会按预期工作 每当我单击一个标记
  • 为什么它返回一个随机值而不是我给函数的值?

    在C程序中 有一个交换函数 该函数采用一个名为x的参数 我希望它通过更改主函数内交换函数中的x值来返回它 当我将参数视为变量时 我想要它 但是当我直接为参数设置整数值时 程序会产生随机输出 include
  • 与 Nodejs Express 共享 Laravel 4 会话

    我正在尝试从 NodeJS 上标头的 Cookie 中获取 Laravel 会话 ID 到目前为止我已经尝试过 function nodeDecrypt data key iv var decipher crypto createDecip