对象已打开进行读取_MATLAB数据库入门:读取Chrome浏览器的本地Cookies文件

本文介绍了如何使用MATLAB读取Chrome浏览器的本地Cookies文件,从尝试以文本文件打开,使用MATLAB内置SQLite接口,到安装JDBC驱动成功连接SQLite数据库。还详细讲解了解密encrypted_value的步骤,包括利用Python的win32包完成解密,并强调了数据类型转换的重要性。
摘要由CSDN通过智能技术生成

本文的起因是,我想用MATLAB读取本地浏览器的Cookies文件(读了干啥就不用说了吧)。

1.尝试以文本文件打开

一般地,Chrome浏览器的本地Cookies文件位于用户文件夹下的AppDataLocalGoogleChromeUser DataDefaulCookies。因为没有文件扩展名,首先尝试以文本文件打开。

fid = fopen('Cookies','rt');
str = fscanf(fid,'%s')
fclose(fid)

可以看到,大部分是乱码,但在字符串开头,能够看到“SQLiteformat 3"等字样。原来这是一个SQLite数据库文件。

2.尝试使用sqlite对象进行读取

sqlite是一个轻量级的数据库引擎,MATLAB自带了相关的接口,无需加载驱动,可以直接对SQLite进行连接、读取、写入操作。

conn = sqlite('Cookies');
sqlquery = 'select * from cookies';
data = fetch(conn,sqlquery);

然而失败了...

30da1a07fd69558793dd66faada92071.png

查了一下文档,MATLAB的SQLite接口仅支持double、int64、char数据类型,所以失败可能跟不支持的数据类型有关。

3.安装JDBC驱动来读取SQLite

除了MATLAB自带的SQLite接口,也可以通过安装JDBC驱动来读取SQLite数据库,功能更加丰富。二者的区别如下:

8269ffa15acb69c721bd4a86ca2a803c.png

SQLite的JDBC驱动下载地址在MATLAB文档已经给出:https://ww2.mathworks.cn/products/database/driver-installation.html

驱动版本为3.27.2.1,是一个.jar的java类文件。

1.配置数据库

下面就可以开始配置SQLite数据库了,首先,在APP下拉菜单找到Database Explorer这个APP,点开。或者也可以在命令行输入以下代码:

databaseExplorer

b8cb14c207fa5970e81118201028791c.png

然后,选择Configure Data Source-> Configure JDBC data source。

0fcdb63f1f8bf4026a29f4797f85b947.png

然后在弹出的窗口,Name自己设一个(这里设为cookies),Vendor选择OTHER, Driver Location输入刚刚下载的JDBC驱动的全路径文件名。下面的Driver输入org.sqlite.JDBC,URL输入jdbc:sqlite:subname,其中subname为想连接的数据库文件的全路径文件名(这里就是Cookies文件)。然后点击下方的Test,在弹出的Test对话框,Username和password自己随便设(别使用奇奇怪怪的字符就行),然后Test,弹出Connection Successful!的对话框就表示设置成功。

e53f58e900d7c4fb3e8106a8d3a8742b.png

Save之后就可以使用这个数据库了。

2. 读取数据库

可以使用图形界面或者命令行的形式。

使用图形界面,在Database Explorer App单击New Query来添加一个数据库。在弹出的对话框,Data Source可以下拉找到我们刚刚配置的cookies数据源,Username和Password使用刚刚设的,然后connect。(在此之前,关闭Chrome浏览器,不然Cookies文件处于锁定状态,无法读取。

3d92bffc5b24a913d0141298b51b3d9e.png

在打开的数据库文件右侧可以勾选实现Select命令,上方有join,where等命令。

a6ba7c4232a91868ce747d0d5c32f873.png

可以使用Import Data导出数据到MATLAB的workspace。(Import Data也可以用于生成相应的m代码,sqlquery等等)

0ccc8aec841ea113dbae1d93e47e9116.png

上述读取数据的过程可以用如下命令行的形式体现出来:

datasource = "cookies";
username = "myCookies";
password = "123456";
conn = database(datasource,username,password);
sqlquery = "select host_key,name,encrypted_value,expires_utc from cookies where host_key = '.zhihu.com' or host_key = 'www.zhihu.com'";
data = fetch(conn,sqlquery);
close(conn);

4.Cookies中encrypted_value的解密

注意到,cookies中的值是加密的,使用的是AES加密,在本地机器上可以直接解密。遗憾的是,MATLAB上面没有自带的AES加密/解密功能。(MATLAB官方论坛上有人提过这个问题,似乎这个AES加密解密的代码是受美国出口管制的,Mathworks出于这个考虑所以没有相关的功能)

怎么办呢?当然是选择胶水语言python。

for ii = 1:size(data,1)
    temp = py.win32.win32crypt.CryptUnprotectData(data.encrypted_value{ii});
    temp = cell(temp);
    data.value{ii} = char(temp{1,2});
end

注意数据类型的转换,利用cell函数将python返回的tuple对象转换为cell,char函数将bytes对象转换为字符数组。

73c21e3089a861f8930f2332800c38bc.png

提取出的cookies可以去和Chrome浏览器中看到的进行比对。(可能有新的cookies)

5. 总结

  1. MATLAB可以读取各种JDBC/ODBC的数据库。
  2. 自带的SQLite接口功能有限。
  3. 利用python中的win32包实现Cookies值的解密。
  4. 注意python返回的数据对象需要转换为MATLAB支持的数据对象。

最后是专栏目录。

易夕:MATLAB Tricks 专栏目录​zhuanlan.zhihu.com
68cea2b51364b10930677ad7f2cc252a.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值