将数据存储为加密的MATLAB .mat文件

3

有没有办法将包含数据库的.mat文件保存为加密文件。我希望只有我的程序(GUI)可以读取这些.mat文件,而不是其他用户通过直接在MATLAB中打开文件来读取。

这个链接可能会有所帮助,但我对这个页面的定义不太熟悉。你能详细描述一下吗?: 序列化/反序列化

谢谢。

2个回答

3
我没有听说过,但可能有其他保护它的方法: 由于缺少MWE,我来举一个例子:假设您知道要保存哪些变量。我在此假设要保存变量A和B。A是double类型,B是逻辑类型(不同大小)。(单元格需要以不同的方式保存(逐个单元格),更不用说结构体了!)
A=[1,2,3,4;5,6,7,8]; % your data (double) in your GUI
B=[0,1,1,0,1]==1; % your data (logical) in your GUI
pw='user2991243'; % make up a 'password' as variable in the GUI
% call this from your GUI function
function CreateHiddenData(A,B)
    fid=fopen('hiddendata.m','w');
    fprintf(fid, '%s\n', 'if strcmp(''user2991243'',pw)');
    % for a double
    str='A=[';
    for k=1:size(A,1)
        str=[str num2str(A(k,:)) ';'];
    end
    str=[str '];'];
    fprintf(fid, '%s\n', str);
    % for a logical
    str='B=[';
    for k=1:size(B,1)
        str=[str num2str(B(k,:)) ';'];
    end
    str=[str ']==1;'];
    fprintf(fid, '%s\n', str);
    fprintf(fid, '%s\n', 'end');
    fclose(fid);
    pcode hiddendata
    delete('hiddendata.m')
end

对于你的程序,你可以直接调用.p文件,它会将变量加载到工作区中。(尽管这样会覆盖所有具有相同名称的变量)


我们如何处理单元数组?我们如何在将数据转换为P代码后读取它们?谢谢。 - Eghbal
序列化不会对数据进行编码,它只是将其保存为字节。这些字节可以被Matlab再次读取。此外,从函数描述中可以看出:“限制条件:没有对象可以具有超过255个维度,每个维度必须小于2^32。同时结构体不能有超过255个字段。” - jmp111
那是一个好的和精确的描述。如果您添加一些用于单元格的代码,如 %for a double%for a logical,它会更有用。再次感谢。 - Eghbal
当我在MATLAB中运行P代码时,出现了这个错误:Error using open (line 162), cannot edit the P-file。谢谢。 - Eghbal
更多信息:对于单元数组,我们不能使用num2str。我们需要一个新的函数。+在某些单元格中,我没有数字。我有像名字这样的字符串。 - Eghbal
显示剩余3条评论

0
你应该看一下函数pcode,或许它能帮到你。

“P-code” 可以保护 “M-file”,但无法保护 “Mat-File”。我正在寻找保护 “Mat-File”的方法。无论如何,谢谢。 - Eghbal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接