这种本土算法是否可以安全加密?

gau*_*196 -5 encryption cryptography challenge-response

Jasoos(密码算法)

我正在加密和解密Web应用程序.我已经构建了一个使用24字节密钥来加密/解密消息的算法.

查看此算法,请在此算法中提出可以使其表现更好的重要和错误.您的贡献可以帮助我们改进算法.

代码在我的GitHub上提供

算法:-

1] 24位输入/生成的密钥将被转换为24位代码的ASCII码.

public void setKey(char[] arr){
 for(int i=0;i<24;i++){
   key[i] = (int)arr[i];
 } 
}
Run Code Online (Sandbox Code Playgroud)

2]输入的字符串将更改为字符数组.

然后,每个字符将首先使用键的值递增,并更改为10位二进制代码.

 public void Encryption(String text){
 char[] msg = text.toCharArray();
 int flag = 0;
 int l = msg.length;
 for(int i=0;i<l;i++){
  int a = (int)msg[i];
 // System.out.print(msg[i]+" "+a+"-> ");

 if(flag>23)
     flag=0;
 int b=a+key[flag];
 flag++;
 //System.out.print(b+" | ");
 String z = binary(b);
 sb.append(lookUpTool(z));
 //Character.toString((char)b);
 }
 //sb.append(sumBinary);
 sb = comp1(sb);
}
Run Code Online (Sandbox Code Playgroud)

3] lookUp(): - 它将10位字符串作为输入和矩阵,并将该字符串分成两个5位二进制代码.

然后,我们将计算每个5位二进制代码的十进制值.

示例:0011101101 - > 00111 = 7和01101 = 13

我们有一个32 X 32维的矩阵,它具有从0到1023的唯一随机值,不会公开共享.

对于0011101101,我们将查找第7行和第13列值.该值将更改为10位二进制代码.

public String lookUp(String bits, int[][] mat){

int mid = Math.round((float) bits.length() / 2);
String part1 = bits.substring(0, mid);
String part2 = bits.substring(mid, bits.length());
int row=binaryValue(part1);
int col=binaryValue(part2);;


//System.out.print("row: "+row);
// System.out.println("|| col: "+col);
int a = mat[row][col];
return binary(a);

}
Run Code Online (Sandbox Code Playgroud)

4]我们将通过lookUpTool方法使用十个不同的私有矩阵执行此步骤十次.

  public String lookUpTool(String s){

   String s1 = lookUp(s,matrix1);
   String s2 = lookUp(s1,matrix2);
   String s3 = lookUp(s2,matrix3);
   String s4 = lookUp(s3,matrix4);
   String s5 = lookUp(s4,matrix5);
   String s6 = lookUp(s5,matrix6);
   String s7 = lookUp(s6,matrix7);
   String s8 = lookUp(s7,matrix8);
   String s9 = lookUp(s8,matrix9);
   String s10 = lookUp(s9,matrix10);

   return s10;
Run Code Online (Sandbox Code Playgroud)

}

同样,我们将对文本/字符串中的每个字符执行此操作并对其进行加密.

示例: -

:c | H @ yLzd3PkRte0H,u16zt8N

消息:abcd ef $

加密后:11001111000001101010000010000101101000001110100000101010111001110000011000001000

Dav*_*rtz 5

任何合理的标准,你的算法都是毫无价值的.最明显的问题是:

您刚刚给了我们一个密钥,明文和相应的编码消息.这会泄漏出您不应公开分享的超级秘密矩阵中的大量条目.(加密消息的每个十位块都是来自该阵列的条目,使用密钥和明文,我可以确定它是哪一个.)

想象一下,如果对手有一组已经由您的算法加密的消息,那么您就发布了这个挑战.他现在可以解密这些消息的很大一部分,只是从你在这次挑战中泄露的内容中解密出来.如果有明显的缺失位,比如他有"trans_ormer",他可以在你以前的超级秘密阵列中找出另一个条目.

但请阅读评论中的链接.尝试设计自己的加密算法以实际使用和依赖这种方式是绝对愚蠢的.在每种类型的已知密码分析专家对其进行彻底审查之前,新算法甚至不能被考虑用于实际用途.

另一个算法缺陷立即显而易见.攻击者会知道密钥每24个字符重复一次.用英语说的足够长的消息,攻击者可以对每24个字符的每一组进行频率分析.如果攻击者知道消息格式并且该格式具有更不等的频率分布,那就更糟了.

  • 如果继续沿着这条路走下去,在某些时候你会得到一个没有你知道的缺陷的算法.那又怎样?你绝对没有理性的基础可以相信它能够提供任何比你更有知识的对手的安全保障.而且,显然,你在这方面并不是特别了解.(如果你想获得知识,这很好.但是****************************************************************************************** (3认同)
  • 你学到了错误的教训.使用此方法,您将只能修复您能够理解的问题.有一些问题超出了你的理解水平,所以你将无法设计一个我们可以依靠没有这些问题的算法.将"差分密码分析"打入您最喜欢的搜索引擎,以了解只需要一种类型的攻击,这种攻击需要特定类型攻击的专家来确定您的算法是否容易受到某种特定类型的攻击.还有更多. (2认同)