【问题标题】:Magic number removal on ROT13 in ColdFusionColdFusion 中 ROT13 上的幻数去除
【发布时间】:2019-05-15 08:13:23
【问题描述】:

我有这个计算 ROT13 的函数。

string function rot13(required string inString) output="false"  {

  var j = 0;
  var k = 0;
  var out = "";
  for (var i = 1; i <= Len(arguments.inString); i++){
    j = asc(Mid(arguments.inString, i, 1));
    if(j >= asc("A") && j <= asc("Z")) {
        j = ((j - 52) % 26) + asc("A");
    }
    else if(j >= asc("a") && j <= asc("z")) {
        j = ((j - 84) % 26) + asc("a");
    }

    out &= Chr(j);
  } // end for

  return out;
}

我不喜欢它似乎有 3 个幻数 52、26 和 84。我认为 26 可以替换为 asc("Z") - asc("A") + 1

但我不知道 52 和 84 代表什么。我不知道我会给他们取什么名字。

【问题讨论】:

  • 这是为了简单的混淆吗? ROT13 对安全性的作用并不大。
  • 如果你做双 ROT13,它的安全性是原来的两倍。说真的,它并不安全。
  • 另外,您可以删除var k。它没有被使用。
  • 双 ROT13 是 ROT26 是明文。 :-)
  • 您可以随时评论这些神奇数字的含义。由于这只是一个旋转密码,它只会增加函数的开销以对其进行可变化。

标签: coldfusion magic-numbers rot13 coldfusion-2018


【解决方案1】:

通过查看您的幻数和 ASCII 表,我想出了这个。

26 是字母表中的字母数。这是你的第一个幻数。

asc('A') 是 65。65 减去 13 是 52,你的第二个幻数。

asc('a') 是 97。97 减去 13 是 84,你的第三个幻数。

这就是数字所代表的含义。您可以决定如何命名变量。或者,您可以将说明添加为评论。

编辑从这里开始

13 是您正在旋转的字符数。这也是一个神奇的数字。您可以通过将此作为参数来增强您的功能,以便您也可以按其他数字旋转。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多