Search code examples
matlabhashcryptographysha1password-hash

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

This is my code for sha-1 hashing. where i am getting problem in for loop to generate all possible combinations in line

y(k,1)=strcat(S(i),S(j)).

its running properly. but its taking too long. i have been running this code for 2 days still its not getting over as my dictionary contains over 5000 words. please suggest me some good idea to do faster and some better way to improve and crack it.


Solution

  • Since you did not provide some data to test the code, I created my own test data, which is a cell array containing 400 words:

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

    Here is the code with some small changes but with huge impact on the performance.

    Note that the variable 'y' is here named 'yy' so that you can just copy and paste the code to compare it with your existing code:

    % 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
    

    With my examplary data, your code took 7.78s to run and the improved and proposed code took 0.23s on my computer.

    I would recommend to read the Matlab docs about Preallocation.