字符数组无法正确获取值

时间:2017-03-14 16:20:36

标签: javascript

这是我正在开发的软件的一个非常具体的问题。我创建并使用文本编码器,但代码中存在一个小错误。

演示:https://dotjersh.github.io/sangwa/

如果我输入70,则可以返回的值之一是F0。 但是,当我解码F0时,结果为7)。 我用大量的数据和不同的情况测试了代码,它适用于除此之外的所有其他场景。

代码:

var sangwa = {
  array: "~!1@2#3$4%5^6&7*8(9)0_-=+  qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\"'zZxXcCvVbBnNmM,<.>/?",
  key: function(value){
    var a = this.array + this.array;
    if(typeof value === "string"){
      return this.array.indexOf(value);
    } else if(typeof value === "number"){
      if(value >= 0){
        return a[value];
      } else {
        return a[this.array.length + value];
      }
    } else {
      return this.array + this.array;
    }
  }
}

sangwa.encode = function(value){
  var result = "";

  var rand = Math.floor(Math.random() * 6) + 2;

  value = "A" + value;

  for(var i = 0; i < value.length; i++){
    result += sangwa.key(sangwa.key(value[i]) + rand);
  }

  return result;
}

sangwa.decode = function(value){
  var result = "";

  var rand = parseInt(sangwa.key(value[0]) - sangwa.key("A"));

  for(var i = 1; i < value.length; i++){
    result += sangwa.key(sangwa.key(value[i]) - rand);
  }

  return result;
}

如果您想以这种方式建议更改,则代码在github上: https://github.com/dotjersh/sangwa/blob/master/sangwa.js

2 个答案:

答案 0 :(得分:2)

我可以看到一些错误:

  • 您的“array”包含空白两次。这就是"F0 "未按预期解码的原因。事实上,encode("70")encode("7)") rand=6会产生相同的结果,这使得无法反转。
  • if(value >= 0)区别毫无意义,因为您的value对于有效输入始终为正
  • 您应该在索引
  • 上使用var a = this.array + this.array;,而不是% array.length
  • 您应该编写两个单独的方法,而不是在value方法中切换key的类型
  • parseInt中的decode毫无意义(如果不是错误的话),因为参数已经是整数

答案 1 :(得分:0)

享受))

&#13;
&#13;
var fox = [ 8, 25, 43, 9, 85 ]; // this is key

function encoder( str, encode )
{
    var a = 0, out = '';
    for (var i=0; i < str.length; i++)
    {
        out += String.fromCharCode( str.charCodeAt(i) + ( encode ? fox[a] : -fox[a] ) );
        a = ( a + 1 ) % fox.length
    }
    return out
}

str1 = 'Lorem ipsum dolor sit amet, consectetur \
adipiscing elit, sed do eiusmod tempor incididunt \
ut labore et dolore magna aliqua. Ut enim ad minim \
veniam, quis nostrud exercitation ullamco laboris nisi \
ut aliquip ex ea commodo consequat. Duis aute irure dolor \
in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. \
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt \
mollit anim id est laborum.';

str2 = 'TˆnÂ(‚›|Êu9xÁw‹K|¾|9Œvº|EKlÄvŒlÉm {ui}”y¾{|”w¼(~—rÉ49žn¹(}š)\
ºqŽžvÄl9ŸnÂxˆ)¾v|”m¾lŽ™}u}Ku¶jˆnumKmÄtˆnuuz’w¶(z—rÆ}zY)ª|9w¾u9Œmuu‚™rÂ(w¾i†\
W)Æ}‚ž)ÃwŒŸ{Êl9ºz|”}¶|‚šwu}…—jÂkˆKu¶jˆrÈ(‡”|¾(ŽŸ)¶t‚œ~¾x9umzKlÄu†šmÄ(|šwÈmŠ jÉ69o~¾\
{9Œ~Ém9”{Êz~KmÄtˆ)¾v9nÅz~“nÃl~rÉ(‚™)Ëw… yÉi)Ëm…”}umŒžnuk‚—uÊu9xÁw‹)º}9‘~¼qzŸ)Ã}…—jux\
zr¶|Ž7uM‘ŽnÅ|~ {u{‚™}uw|ŽjºkzŸ)¸}‰”m¶|zŸ)Ãw‡KyÇw‚nÃ|EK|ÊvKrÃ(| uÅi9œ~¾(ˆ‘o¾k‚Œ)¹mŒ{ÊvKvÄt…”}ui‡”vuq}KnÈ|9—j·w‹ vƒ';

console.log( encoder(str1, true ))
console.log( encoder(str2, false ))
&#13;
&#13;
&#13;