滴水静禅天
扫描关注滴水静禅天

扫码加微信:-)

基于幻方矩阵的字符加密器

滴水静禅天2017-04-12杂七杂八 1569

      在很多情况下有些关键信息,特别是密码、邮件、网址等字母数字混合型字符串在网际传播时具有隐私泄漏的风险。为了对敏感信息进行预先的加密然后通过密钥进行反向运算从而解密。本方法是对古典加法密码的一种改进,通过利用幻方矩阵元素的特有性质对原始信息进行独特二次编码。

加密对象

      加密对象为a-zA-Z0-9共计62个字符,通过一定各外部参数(密钥)的输入确定加密/解密的法则。

密钥参数

参数1:三大块不连续符号区块(ASCII吗)构成一个线性表,参数1可以确定三大块线性排列的收尾相接顺序。

参数2:确定生成幻方矩阵的维数nn>inputStr.length

参数3:确定截取子矩阵的起始位置。

参数4:确定行\列选取方式

参数5:确定具体的行()

作用机理

实际效果

Demo 数字字母混合型密码

明文:made864OK  密钥2@4K

ScreenGif.gif

核心代码

function outcharInds=encryption(proCharInds,selp,seln,selWay)

%²ÎÊý˵Ã÷ outchar ΪÊä³öµÄ×Ö·ûASCII

%         Table Ϊ³ÌÐòÐγɵÄÂë±í

%         proCharInd Ϊ´ý´¦Àí×Ö·û

%         selp Ϊ Ñ¡ÔñÐл¹ÊÇÁÐ0ÐÐ 1ÁÐ

%         seln Ñ¡ÔñÐÐ/ÁÐÊý

%         selWay ²éѯ·½Ê½1...ÕýÏò²éѯ(¼ÓÃÜ),0...½âÃÜ

n=length(proCharInds);

M=magic(62);

%È«²¿×ª»»³ÉÐÐÏòÁ¿

if selp==0

    m=M(seln,:);

elseif selp==1

    m=M(:,seln)'; 

end

[~,mInd]=sort(m);

 

 outcharInds=zeros(n,1);

 if selWay==0

 for i=1:1:n

     if(isempty(find(proCharInds(i)==mInd))) %¿´ÊÇ·ñΪ¿Õ,Èç¹û1Ϊ¿Õ

        outcharInds(i)= proCharInds(i);

     else

        outcharInds(i)=find(proCharInds(i)==mInd);

     end

 end

 elseif selWay==1 %ÄæÏò²éѯ

     for i=1:1:n

         if(proCharInds(i)+1)<0

             outcharInds(i)= proCharInds(i);

         else

              outcharInds(i)=mInd(proCharInds(i));

         end

     end

end


 

发表评论