Matlab代码Sha-1散列密码

Matlab code Sha-1 hashing password

clc;clear all;close all;
fileID = fopen('H:\dictionary.txt');
S = textscan(fileID,'%s','Delimiter','\n') ;
fclose(fileID);
S = S{1} ;
% remove empty cells
 S = S(~cellfun('isempty',S));
 n=length(S);
k=0;

 for i=1:n  
     for j=1:n
   k=k+1;
 y(k,1)=strcat(S(i),S(j))
     end
 end

这是我的 sha-1 哈希代码。我在 for 循环中遇到问题,无法在行

中生成所有可能的组合
y(k,1)=strcat(S(i),S(j)).

它的 运行 正确。但它花了太长时间。我已经 运行 这个代码 2 天了,但我的字典包含超过 5000 个单词,所以它仍然没有完成。请给我一些好点子,让我做得更快,更好的方法来改进和破解它。

由于您没有提供一些数据来测试代码,我创建了自己的测试数据,这是一个包含 400 个单词的元胞数组:

% create cell array with a lot of words
S = repmat({'lalala','bebebebe','ccececeece','ddededde'},1,100);

下面是一些小改动但对性能影响很大的代码。

请注意变量 'y' 在这里命名为 'yy' 以便您只需复制并粘贴代码即可将其与现有代码进行比较:

% Preallocate memory by specifying variable and cell size
yy = cell(n^2,1);

% Measure time
tic

k = 0;
for i=1:n
    for j=1:n
        k=k+1;
        % Replace strcat() with [] and index cell content with S{i} instead
        % of indexing the cell itself with S(i)
        yy{k}=[S{i},S{j}];
    end
end

% Stop and output time measurement 
toc

根据我的示例数据,您的代码用了 7.78s 到 运行,改进和建议的代码用了 0.23s在我的电脑上。

我建议阅读有关 Preallocation 的 Matlab 文档。