javascript - 卡在新铁路围栏密码中的解密(之字形模式)

标签 javascript encryption cryptography

我正在尝试制作类似于铁路围栏的新密码,但例如在 zic zac Patten 中

   *   * *   *
    * * * * *
     *     *

我成功地完全能够使用上述模式加密文本。

这是我的javascript代码

var plain_txt = "mynameismanan5439"

var a = ''
var b = ''
var c = ''
var d = ''
var flag_a = 0

function enc(plain) {
  for (var i = 0; i < plain.length; i = i + 4) {
    if (flag_a == 0) {
      a += plain.charAt(i)
      //console.log(i+","+(i+1)+","+(i+2)+","+(i+3))
      b += plain.charAt(i + 1)
      c += plain.charAt(i + 2)
      b += plain.charAt(i + 3)
      flag_a = 1
      continue
    } else {

      a += plain.charAt(i)
      b += plain.charAt(i + 1)

      //console.log(i+","+(i+1))
      i = i - 2
      flag_a = 0
    }
  }
  return (a + b + c)
}
console.log(enc(plain_txt))

但我的问题是我没有弄清楚如何编写给定问题的解密程序请帮助我

我想要输出类似dec(enc(plain_text))==plain_text

提前谢谢你

最佳答案

@zaph 也许三个是另一种方式来找出我感谢你的回答 最后我找到了一个解决方案,感谢@zaph 的动力和你给我提示的时间,请删除 捕获任何为什么这不是一个好的密码是必须知道全长来分隔字符进行解密。 来自您的评论,因为没有什么是不可能的

这是我想要的解密代码

var plain_txt = "mynameismanan5439"


function enc(plain){
  var a = ''
  var b = ''
  var c = ''
  var d =''
  var flag_a = 0
for(var i = 0;i<plain.length;i=i+4){
    if(flag_a == 0){
    a += plain.charAt(i)
   //console.log(i+","+(i+1)+","+(i+2)+","+(i+3))
    b += plain.charAt(i+1)
    c += plain.charAt(i+2)
    b += plain.charAt(i+3)
    flag_a = 1
    continue
    }

    else{

        a += plain.charAt(i)
        b += plain.charAt(i+1)

    //console.log(i+","+(i+1))
        i = i-2
        flag_a = 0
    }
}
return (a+b+c)
}
console.log("encryption is = "+enc(plain_txt))
function dec(cipher){
var plain = ''
var a =''
var b =''
var c =''
var length = cipher.length
var multply = parseInt(length/6)
if (length>=6){
a = cipher.slice(0, (2*multply));
b = cipher.slice((2*multply),(5*multply));
c = cipher.slice((5*multply));
}
if((length%6)==1){
  a =  cipher.slice(0, (2*multply)+1);
  b = cipher.slice((2*multply)+1,(5*multply)+1);
  c = cipher.slice((5*multply)+1);
}
else if((length%6)==2){
  a =  cipher.slice(0, (2*multply)+1);
  b = cipher.slice((2*multply)+1,(5*multply)+2);
  c = cipher.slice((5*multply)+3);
}

else if((length%6)==3){
  a =  cipher.slice(0, (2*multply)+1);
  b = cipher.slice((2*multply)+1,(5*multply)+2);
  c = cipher.slice((5*multply)+2);
}
else if((length%6)==4){
  a =  cipher.slice(0, (2*multply)+1);
  b = cipher.slice((2*multply)+1,(5*multply)+3);
  c = cipher.slice((5*multply)+3);
}
else if((length%6)==5){
  a =  cipher.slice(0, (2*multply)+2);
  b = cipher.slice((2*multply)+2,(5*multply)+4);
  c = cipher.slice((5*multply)+4);
}
var a_counter = 0
var b_counter = 0
var c_counter = 0

for(var i = 0;i<length-1;i+=6){
plain += a.charAt(a_counter) + b.charAt(b_counter) + c.charAt(c_counter)+b.charAt(b_counter+1)+a.charAt(a_counter+1)+b.charAt(b_counter+2);
a_counter+=2;
b_counter+=3;
c_counter++;
}
if((length % 6)==1){
    plain += a.charAt(a_counter) ;
  }
  else if((length % 6)==2){
    plain += a.charAt(a_counter) + b.charAt(b_counter);
  }
  else if((length % 6)==3){
    plain += a.charAt(a_counter) + b.charAt(b_counter) + c.charAt(c_counter);
  }
  else if((length % 6)==4){
    plain += a.charAt(a_counter) + b.charAt(b_counter) + c.charAt(c_counter)+b.charAt(b_counter+1);
  }
  else if((length % 6)==5){
    plain += a.charAt(a_counter) + b.charAt(b_counter) + c.charAt(c_counter)+b.charAt(b_counter+1)+a.charAt(a_counter+1);
  }                                                                                           
return plain;
}

console.log("decryption is = "+dec(enc(plain_txt)))

说说你对优化代码有什么想法 谢谢你

关于javascript - 卡在新铁路围栏密码中的解密(之字形模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50864159/

相关文章:

javascript - 验证解密的字符串

java - 加密没有特殊字符的数据 ("=")

javascript - jQuery Mobile - 动态创建表单元素

javascript - 这个例子的哪一部分是闭包?

video - 播放加密的视频

c# - C# 中的 Rijndael 密文不会在 PHP 中反序列化

javascript - 使用 javascript 获取 xml 标签之间的值

javascript - 如何根据表单值更改div id名称?

security - 我们如何确保浏览器实际检查 CA 的 SSL 证书?

java - 在Java中使用bouncycaSTLe生成p7b证书链